带函数的列表,如何理解新列表是如何创建的

2024-10-03 13:22:07 发布

您现在位置:Python中文网/ 问答频道 /正文

这个代码是怎么工作的?。它会创建一个新的列表,而不会影响代码中的原始列表?你知道吗

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

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

Tags: 代码列表returndefarelistawesomeprint
3条回答
  • 我给你一个提示。你知道吗
  • 正如您在case中所看到的,当您只需将它赋给另一个变量时,它们都指向同一个对象在本例中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

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

注意:这将不起作用,例如,如果列表包含子列表-对子列表执行的操作也会影响原始列表中的子列表。你知道吗

deepcopy可用于具有子列表的列表。你知道吗

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

newlst = changeit(list(mylst))

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

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

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

相关问题 更多 >