我正在尝试更改嵌套列表中的项目。我认为这将非常简单。我有以下内容:
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]]
为什么要改变四个位置,而不只是一个?如何避免呢?
答案 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]]
>>>