此问题已经在这里有了答案:
#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
的原因。
在情况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
Writing old = myList
不会将两个变量绑定在一起;它将myList
的值分配给old
在那个时间点。之后,通过将myList
重新分配给新列表,可以使myList
和old
指向不同的值。