ree*_*eek 11 python list mutable
我发布了与我的标题相同的上一个问题(我认为)同样的问题,但代码中还有其他问题.我无法确定该案件是否与我的相同.
无论如何,我想替换列表中列表中的元素.码:
myNestedList = [[0,0]]*4 # [[0, 0], [0, 0], [0, 0], [0, 0]]
myNestedList[1][1] = 5
Run Code Online (Sandbox Code Playgroud)
我现在期待:
[[0, 0], [0, 5], [0, 0], [0, 0]]
Run Code Online (Sandbox Code Playgroud)
但我得到:
[[0, 5], [0, 5], [0, 5], [0, 5]]
Run Code Online (Sandbox Code Playgroud)
为什么?
这在命令行中复制.在Linux2上的Python 3.1.2(r312:79147,2010年4月15日,15:35:48)[GCC 4.4.3]
Ton*_*nen 17
你有四个对同一个对象的引用*4,使用list comprehension和range来计算:
my_nested_list = [[0,0] for count in range(4)]
my_nested_list[1][1] = 5
print(my_nested_list)
Run Code Online (Sandbox Code Playgroud)
更具体地解释一下这个问题:
yourNestedList = [[0,0]]*4
yourNestedList[1][1] = 5
print('Original wrong: %s' % yourNestedList)
my_nested_list = [[0,0] for count in range(4)]
my_nested_list[1][1] = 5
print('Corrected: %s' % my_nested_list)
# your nested list is actually like this
one_list = [0,0]
your_nested_list = [ one_list for count in range(4) ]
one_list[1] = 5
print('Another way same: %s' % your_nested_list)
Run Code Online (Sandbox Code Playgroud)