Python列表删除项目,即使没有明确告诉

时间:2017-03-21 22:23:43

标签: python list

因此,从列表中删除元素时遇到了一个非常不寻常的问题,我以更小,更容易理解的格式重新创建了问题。基本上从列表中删除项目将从先前设置的不同列表中删除相同的项目等于主循环之外的原始列表。

a = [1,2,3,4]
b = a

while True:
    print("a:", a)
    print("b:", b)
    c = int(input("delete"))
    del(a[c])
    print("a:", a)
    print("b:", b)
    break

返回:

a: [1, 2, 3, 4]
b: [1, 2, 3, 4]
delete2 #the "2" is my input
a: [1, 2, 4]
b: [1, 2, 4]
>>> 

我研究并看到了关于浅/深拷贝的一些事情,但我不太确定,如果有人能够更多的光线那将是更好的

1 个答案:

答案 0 :(得分:3)

这是因为ab是同一列表的名称(或者更正式地说,是对同一对象的引用)。

要为新列表创建名称,请复制它:

b = list(a)
# or
b = a[:]

这将创建一个包含完全相同成员的新列表,称为浅拷贝。

深层复制是指递归复制整个结构,但似乎不需要这样。