python - 改变列表字典中的一个 python 列表会改变所有列表

标签 python list dictionary

<分区>

Possible Duplicate:
Two separate python lists acting as one

这段代码创建了一个列表字典,键在 usens 中。列表中充满了 0

usens = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 14, 110, 111, 112, 113, 114,
         115, 116, 117, 118, 119, 302, 303, 306, 307, 308, 370, 371, 500,
         501, 1000, 1010, 1020, 1100, 1200, 1201, 1202, 2000, 2001, 2002
         ]
empty = [[0]*length]*len(usens)
data = dict(zip(usens, empty))
pprint.pprint(data, indent=5)

data[0][0] += 1
pprint.pprint(data, indent=5)

第一个 pretty-print 返回预期的(删除了模糊):

{0: [0, 0, 0, 0, 0],
 1: [0, 0, 0, 0, 0],
 2: [0, 0, 0, 0, 0],
 3: [0, 0, 0, 0, 0],
 4: [0, 0, 0, 0, 0],
 5: [0, 0, 0, 0, 0],
 .....
 2001: [0, 0, 0, 0, 0],
 2002: [0, 0, 0, 0, 0]}

然后我这样做:data[0][0] += 1,期望第一个列表(索引 0)以 1< 开头,但没有其他要更改的内容。

但是,所有列表都已修改:

{0: [1, 0, 0, 0, 0],
 1: [1, 0, 0, 0, 0],
 2: [1, 0, 0, 0, 0],
 3: [1, 0, 0, 0, 0],
 4: [1, 0, 0, 0, 0],
 .....
 2001: [1, 0, 0, 0, 0],
 2002: [1, 0, 0, 0, 0]}

为什么,我怎样才能只修改一个列表?

最佳答案

empty = [[0]*length]*len(usens) 将创建相同列表的 len(usens) 个副本,这与 不同len(usens) 具有相同内容的列表。

尝试 empty = [[0]*length for i in range(len(usens))]

关于python - 改变列表字典中的一个 python 列表会改变所有列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13770585/

相关文章:

python - 监视另一个进程(svn)

python - 用鼠标画画事件策划

python - 将两个列表映射到一个字典列表中

dictionary - 是 "bad form"在一条语句中进行map lookup和type assertion吗?

Python将对象的副本分配给变量

python - 在不重启的情况下为django中的所有进程/线程重新加载.mo文件

java - 如何在运行时确定列表的内容类型

r - 列表、数据框循环和索引问题

python - 变量赋值和修改(在python中)

python - 在python中按1个元素对列表列表进行分类