具有功能的列表,如何理解如何创建新列表

时间:2019-11-22 14:20:37

标签: python python-3.x

此代码如何工作?它会创建一个新列表,而不影响代码中的原始列表吗?

def changeit(lst):
    lst[0] = "Michigan"
    lst[1] = "Wolverines"
    return lst

mylst = ['106', 'students', 'are', 'awesome']
newlst = changeit(list(mylst))
print(mylst)
print(newlst)

3 个答案:

答案 0 :(得分:2)

在另一个mylst函数中包装list()会创建一个新对象,而不是将操作应用于原始列表对象。

请注意,例如,如果列表包含子列表,则此方法将不起作用-在子列表上执行的操作也会影响原始列表中的子列表。

deepcopy可以用于带有子列表的列表。

答案 1 :(得分:1)

在此处调用list([iterable])构造函数时会发生这种情况:

newlst = changeit(list(mylst))

它在内存中构造一个新的列表对象。如果将其删除,则将显示以下输出:

>>> newlst = changeit(mylst)
>>> print(mylst)
>>> print(newlst)

['Michigan', 'Wolverines', 'are', 'awesome']
['Michigan', 'Wolverines', 'are', 'awesome']

答案 2 :(得分:-1)

  • 我会给你一个提示。
  • 如您所见,当您只是简单地将其分配给另一个变量时,它们都指向同一对象,在这种情况下,mylsta指向同一对象,因此修改其中任何一个都会改变其他。
  • 对于b,当您使用list函数时,它将创建mylst的新对象。您可以通过比较mylstab
  • 的ID来对此进行更改
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