我需要在Python中创建一个列表列表,所以我输入以下内容:
myList = [[1] * 4] * 3
Run Code Online (Sandbox Code Playgroud)
列表看起来像这样:
[[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]
Run Code Online (Sandbox Code Playgroud)
然后我改变了最里面的一个值:
myList[0][0] = 5
Run Code Online (Sandbox Code Playgroud)
现在我的列表看起来像这样:
[[5, 1, 1, 1], [5, 1, 1, 1], [5, 1, 1, 1]]
Run Code Online (Sandbox Code Playgroud)
这不是我想要或期望的.有人可以解释一下发生了什么,以及如何解决这个问题?
我遇到了我认为Python中的一个奇怪的行为,我希望有人在可能的情况下解释它.
我创建了一个空的2D列表
listy = [[]]*3
print listy
[[], [], []]
Run Code Online (Sandbox Code Playgroud)
以下工作正如我所料:
listy[1] = [1,2] 产量 [[], [1,2], []]
listy[1].append(3) 产量 [[], [1,2,3], []]
但是,当我附加到其中一个空列表时,python会附加到所有子列表,如下所示:
listy[2].append(1)收益率[[1], [1,2,3], [1]].
谁能向我解释为什么会出现这种情况?
乡亲,
我想知道以下两个陈述是否相同?
a = [[0]*3]*3
b = [[0]*3 for i in range(3)]
Run Code Online (Sandbox Code Playgroud)
结果看起来一样.但是一种方式会比另一种更好吗?这有什么区别.
非常感谢您的帮助.
号