【问题标题】:python: mutating the copy of a list changes the original?python:改变列表的副本会改变原始列表?
【发布时间】:2013-12-10 00:50:56
【问题描述】:

所以直到现在,我的假设是如果你有例如:

L = [1,2,3]
L2 = L1
L2.append(5)

L 和 L2 都会受到附加代码的影响。

但是,当您将 L2 指定为列表的副本时,例如:

L = [1,2,3]
L2 = L[:]
L2.append(5)

只有L2会受到影响,L仍然指[1,2,3]

但我现在遇到了这个:

x = [1, 2]
L1 = [x, [8, 9]]
L2 = L1[:]
L2[0][1] = 999

>>>print(L1)
[[1,999],[8,9]]
>>>print(L2)
[[1,999],[8,9]]

为什么在这种情况下,两个列表都发生了变化?

【问题讨论】:

    标签: python list


    【解决方案1】:

    切片是浅拷贝。通过切片创建的副本将包含对原始列表中旧元素的新引用;如果原始列表包含可变对象(例如更多列表),则副本将包含对这些相同列表的引用。您可以使用copy.deepcopy 来尝试解决此问题,或者遍历原始列表并将元素切片复制到新列表中。不过要小心copy.deepcopy;您通常会在某个深度停止复制并保留原始元素。

    【讨论】:

      猜你喜欢
      • 2019-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-16
      • 2011-09-30
      • 2020-08-28
      • 1970-01-01
      相关资源
      最近更新 更多