嵌套列表中的项目分配

时间:2015-10-27 16:02:12

标签: python python-2.7

我正在尝试更改嵌套列表中的项目。我认为这将非常简单。我有以下内容:

temp = [1, 2, 3, 4]
my_list = [temp for i in xrange(4)]
print "my_list = ", my_list

out: my_list =  [[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]]

所以只是一个正常的列表列表。我想访问一个项目:

print my_list[0][1]

out: 2

正如所料。更改项目时出现问题。我只想更改my_list [0] [1]中的项目,但我得到以下内容:

my_list[0][1]= "A"
print my_list

out: [[1, 'A', 3, 4], [1, 'A', 3, 4], [1, 'A', 3, 4], [1, 'A', 3, 4]]

为什么要改变四个位置,而不只是一个?如何避免呢?

1 个答案:

答案 0 :(得分:1)

由于列表是可变对象,当您在另一个列表中重复列表时,您只创建了相同对象的列表(所有这些对象都指向一个内存地址),以解决此问题您需要复制每个列表中的嵌套列表迭代:

>>> temp = [1, 2, 3, 4]
>>> my_list = [temp[:] for i in xrange(4)]
>>> my_list[0][1]= "A"
>>> print my_list
[[1, 'A', 3, 4], [1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]]
>>>