更改 Python 中的列表
Changing lists in Python
#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
写成old = myList
并没有把这两个变量绑定得密不可分;它将 myList
的 值 分配给 old
在那个时间点 。之后通过将 myList
重新分配给新列表,您可以使 myList
和 old
指向不同的值。
#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
写成old = myList
并没有把这两个变量绑定得密不可分;它将 myList
的 值 分配给 old
在那个时间点 。之后通过将 myList
重新分配给新列表,您可以使 myList
和 old
指向不同的值。