代码之家  ›  专栏  ›  技术社区  ›  mahmood

清除内部列表后,清除外部列表

  •  0
  • mahmood  · 技术社区  · 4 年前

    在下面的片段中,我附加了一个列表, x 转到另一个列表 u 这是明确的 十、 .但是,正如您在输出中看到的,在清除 十、 ,第二个列表, U 也被清除了。

    a = array([1,2,3,4])
    x = []
    u = []
    for i in np.nditer(a):
        x.append(i.item())
    u.append(x)
    print("before x.clear(), u=", u)
    x.clear()
    print("after x.clear(), u=", u)
    

    输出

    before x.clear(), u= [[1, 2, 3, 4]]
    after x.clear(), u= [[]]
    

    原因是什么?我希望通过使用 append 一份 十、 附于 U 1.我该如何预防 U 清场后清场 十、 ?

    2 回复  |  直到 4 年前
        1
  •  1
  •   Chris Sears    4 年前

    马克在评论中确实回答了这个问题,但为了完整起见,下面是使用 x.copy() 做你要求的事。。。

    import numpy as np
    
    a = np.array([1,2,3,4])
    x = []
    u = []
    for i in np.nditer(a):
        x.append(i.item())
    u.append(x.copy())
    print("before x.clear(), u=", u)
    x.clear()
    print("after x.clear(), u=", u)
    

    输出:

    before x.clear(), u= [[1, 2, 3, 4]]
    after x.clear(), u= [[1, 2, 3, 4]]
    
        2
  •  0
  •   Najmus Sakib    4 年前

    我想你弄错了。 list.append() 在列表末尾添加一项。 如果您希望保留列表的副本,并且在修改或删除原始列表时不影响复制的列表。 你可以用几种方法来做。

    1. u = x[:]
    2. from copy import deepcopy
    `u = deepcopy(x)`
    

    请参阅文档: https://docs.python.org/3/tutorial/datastructures.html#more-on-lists