【问题标题】:Functions changing copies of lists [duplicate]更改列表副本的函数[重复]
【发布时间】:2021-06-25 12:37:23
【问题描述】:
segp2=[['13s'],['3c','6h','8h','9h','10c','11h'],['4c','4h','5c','5h','7c','7s'],[],[],[],['4h','5h','6h','8h','9h','11h'],[],[]]

copyseg=list(segp2)
copy=list(copyseg[6]);x=0;y=0
for i in copyseg[1]:
    if i in copyseg[6]:copyseg[1].remove(i);copy.remove(i);x+=1
    if x==5:break
for i in copyseg[2]:
    if i in copyseg[6]:copyseg[2].remove(i);copy.remove(i);x+=1
    if x==5:break
for i in copyseg[3]:
    if i in copyseg[6]:copyseg[3].remove(i);copy.remove(i);x+=1
    if x==5:break
print(segp2)
print(copyseg)

这两个在某种程度上是一样的,即使 segp2 实际上没有被触及。根据我的经验,使用 'copyseg=list(segp2)' 会生成不受新代码影响的列表副本。然而不知何故,我在“copyseg”列表中所做的一切都被复制到了“segp2”列表中。我已经尝试了所有我能想到的方法,但不知道为什么会这样。

【问题讨论】:

  • 您正在制作列表列表的副本。
  • 所以我应该遍历列表并复制所有内容?
  • 抱歉,感谢您对深层复制工作的快速响应(显然)

标签: python-3.x


【解决方案1】:

您应该对seg2 列表进行深拷贝:

import copy

copyseg = copy.deepcopy(segp2)

或者,如果您的列表只有一级深度,

copyseg = [list(lst) for lst in segp2]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-06
    • 2019-03-27
    • 2018-05-29
    • 2015-01-03
    • 2020-12-13
    • 2017-07-03
    • 1970-01-01
    相关资源
    最近更新 更多