【问题标题】:Changing lists in Python [duplicate]在 Python 中更改列表 [重复]
【发布时间】:2020-02-05 06:15:50
【问题描述】:
#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


【解决方案1】:

在案例 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

【讨论】:

    【解决方案2】:

    old = myList 并没有将这两个变量绑定得千疮百孔;它将myList分配给old在那个时间点。通过之后将myList 重新分配给一个新列表,您可以使myListold 指向不同的值。

    【讨论】:

      猜你喜欢
      • 2021-12-26
      • 2019-02-01
      • 1970-01-01
      • 2017-08-06
      • 2018-04-16
      • 2016-10-26
      • 2018-12-01
      • 2020-03-28
      • 2013-05-07
      相关资源
      最近更新 更多