2024-10-03 13:22:07 发布
网友
这个代码是怎么工作的?。它会创建一个新的列表,而不会影响代码中的原始列表?你知道吗
def changeit(lst): lst[0] = "Michigan" lst[1] = "Wolverines" return lst mylst = ['106', 'students', 'are', 'awesome'] newlst = changeit(list(mylst)) print(mylst) print(newlst)
mylst
a
b
list
mylst = ['106', 'students', 'are', 'awesome'] a = mylst # reference of mylst b = list(mylst) # copy of mylst print(id(mylst) == id(a)) print(id(mylst) == id(b))
输出:
True False
在另一个list()函数中包装mylst将创建一个新对象,而不是将操作应用于原始列表对象。你知道吗
list()
注意:这将不起作用,例如,如果列表包含子列表-对子列表执行的操作也会影响原始列表中的子列表。你知道吗
deepcopy可用于具有子列表的列表。你知道吗
在这里调用list([iterable])构造函数时会发生这种情况:
list([iterable])
newlst = changeit(list(mylst))
它在内存中构造一个新的列表对象。如果将其删除,则输出:
>>> newlst = changeit(mylst) >>> print(mylst) >>> print(newlst) ['Michigan', 'Wolverines', 'are', 'awesome'] ['Michigan', 'Wolverines', 'are', 'awesome']
mylst
和a
都指向同一个对象,因此修改其中一个将改变另一个。你知道吗b
的情况下,当您使用list
函数时,它会创建mylst
的新对象。您可以通过比较mylst
、a
和b
的id来改变这一点输出:
在另一个
list()
函数中包装mylst
将创建一个新对象,而不是将操作应用于原始列表对象。你知道吗注意:这将不起作用,例如,如果列表包含子列表-对子列表执行的操作也会影响原始列表中的子列表。你知道吗
deepcopy可用于具有子列表的列表。你知道吗
在这里调用
list([iterable])
构造函数时会发生这种情况:它在内存中构造一个新的列表对象。如果将其删除,则输出:
相关问题 更多 >
编程相关推荐