在Python中更改列表[重复]

问题描述 投票:2回答:2
#Case 1
myList=[1,2,3,4]
old=myList
myList=[5,6,7,8]
print(old)

#Case 2
myList=[1,2,3,4]
old=myList
myList[0]=10
print(old)

#Case 3
myList=[1,2,3,4]
old=myList.copy()
myList[0]=10
print(old)

[1, 2, 3, 4]
[10, 2, 3, 4]
[1, 2, 3, 4]

对我来说,情况3是安全的情况,情况2很清楚。但是,我无法清楚地理解为什么不更改1 old的原因。

python list pass-by-reference
2个回答
4
投票

在情况1中,我们正在将一个全新的列表重新分配给名称myList。分配给myList的原始列表不受此操作的影响; myList现在只是指向另一个对象

当我们查看对象的ID时,这一点很明显:

>>> myList = [1,2,3,4]
>>> print(id(myList))
47168728
>>> old = myList
>>> print(id(old))
47168728
>>> myList = [5,6,7,8]
>>> print(id(myList))
47221816
>>> print(id(old))
47168728

0
投票

Writing old = myList不会将两个变量绑定在一起;它将myList分配给old 在那个时间点。之后,通过将myList重新分配给新列表,可以使myListold指向不同的值。

© www.soinside.com 2019 - 2024. All rights reserved.