Python:初始化空嵌套列表时的奇怪列表行为

F. *_*eli 4 python list python-3.x

有人可以解释为什么:

b = 10*[[]]
b[0].append(3)
Run Code Online (Sandbox Code Playgroud)

b 现在是:

[[3], [3], [3], [3], [3], [3], [3], [3], [3], [3]]
Run Code Online (Sandbox Code Playgroud)

但如果我这样做:

b = [[] for _ in range(10)]
b[0].append(3)
Run Code Online (Sandbox Code Playgroud)

b 现在是:

[[3], [], [], [], [], [], [], [], [], []]
Run Code Online (Sandbox Code Playgroud)

还要注意的是

10*[[]] == [[] for [] in range(10)]
Run Code Online (Sandbox Code Playgroud)

返回

True
Run Code Online (Sandbox Code Playgroud)

(在 Python 3.6.1 中测试)

bak*_*Dev 5

 because:
    >>> b = 10*[[]]
    >>> b[0] is b[1]
    True
    >>> b = [[] for _ in range(10)]
    >>> b[0] is b[1]
    False
    >>>
Run Code Online (Sandbox Code Playgroud)