python-list([0,0]) 与 [0,0] 有何不同?

标签 python list dictionary

我遇到了此 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])

ab 都是包含相同值的列表。但它们都是 list 的唯一实例。

现在,如果你这样做:

c = a
d = b

c 指向 a 的同一个实例,d 指向 b,因此如果修改这些值c 的它也会反射(reflect)在 a 中(db 也是如此)。

但是,如果您这样做:

c = list(a)

您基本上是在创建 a 的浅拷贝。这意味着,您创建了一个新列表 c,其中包含与 a 相同的值。因此,对 c 的任何突变都不会影响 a,因为它现在是一个唯一的 list 实例。

但要小心,如果您的列表包含可变对象,它们仍然可以通过复制的列表进行变异。使用copy.deepcopy确保所有对象都复制为新对象。

关于python-list([0,0]) 与 [0,0] 有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30515300/

相关文章:

python - 删除二维数组中的特定值 - Numpy

python - 从词典列表到词典

c++ - 算法::binary_search call中的预期主要表达式

python - 获取两个字典中具有匹配值的键

Python - 将 JSON 对象转换为字典

python - 多重继承 --> Fish.__init__() 缺少 2 个必需的位置参数

python - 当我执行python脚本时,RAM满了并且PC崩溃了。

java - 从Java列表中选择多个随机元素

javascript - 如何声明数组的哈希/字典

python - 返回具有跨列唯一对的行