我遇到了此 link 中描述的问题。在使用我输入的字典理解时
keys = [x for x in range(21)]
value = [0,0]
dict1 = {key: value for key in keys}
而不是:
keys = [x for x in range(21)]
value = [0,0]
dict1 = {key: list(value) for key in keys}
在前一种情况下,问题仍然存在。所有键值都指向同一个列表。为什么会发生这种情况?本质上,我不明白的是 list([0,0]) 如何不将列表创建为 [[0,0]]?
编辑:我知道 list(arg) 仅需要 1 个参数。但是在列表上运行列表意味着什么?
最佳答案
假设您有:
a = [0, 0]
b = list([0, 0])
a
和 b
都是包含相同值的列表。但它们都是 list
的唯一实例。
现在,如果你这样做:
c = a
d = b
c
指向 a
的同一个实例,d
指向 b
,因此如果修改这些值c
的它也会反射(reflect)在 a
中(d
和 b
也是如此)。
但是,如果您这样做:
c = list(a)
您基本上是在创建 a
的浅拷贝。这意味着,您创建了一个新列表 c
,其中包含与 a
相同的值。因此,对 c
的任何突变都不会影响 a
,因为它现在是一个唯一的 list
实例。
但要小心,如果您的列表包含可变对象,它们仍然可以通过复制的列表进行变异。使用copy.deepcopy
确保所有对象都复制为新对象。
关于python-list([0,0]) 与 [0,0] 有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30515300/