【问题标题】:why does this happen with lists in python为什么python中的列表会发生这种情况
【发布时间】:2013-11-06 23:39:27
【问题描述】:

当我将一个列表分配给另一个列表时,我发现在更改一个列表中的一个元素时,会自动为另一个元素分配该值。

这种行为的原因是什么?

>>> a = [1,2,3] # create a list
>>> b = a
>>> b
[1, 2, 3]
>>> id(a)
40307408
>>> id(b)
40307408
>>> a[2] = 5
>>> b
[1, 2, 5]
>>> b[1] = 10
>>> a
[1, 10, 5]

【问题讨论】:

    标签: python string list variable-assignment mutable


    【解决方案1】:

    通过调用b = a,您实际上只是为同一个对象分配了另一个名称,如id(a)id(b) 所示。如果要将 a 复制到 b,则应使用 b = a[:]b = list(a)。在这种情况下,a 和 b 将具有不同的生命周期。尝试调用 id() 并检查。

    【讨论】:

      【解决方案2】:

      因为对象ab 引用同一个对象(正如您通过检查两个对象的ids 观察到的那样)。如果你改变一个值,另一个也会改变。就像ba 的克隆,但将继续作为克隆。

      要避免这种行为,您可以这样做:

      b = a[:]
      

      它为b 分配了a 的副本。

      或者:

      b = list(a)
      

      或者:

      import copy
      b = copy.copy(a) # The copy module can be useful for nested lists.
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-24
        • 1970-01-01
        • 2021-04-30
        • 2010-09-22
        • 1970-01-01
        • 2013-08-02
        • 2018-12-19
        • 2013-06-09
        相关资源
        最近更新 更多