2017-08-23 52 views
2
怪时列表行为

有人能解释为什么:的Python:初始化空巢列表

b = 10*[[]] 
b[0].append(3) 

B现在是:

[[3], [3], [3], [3], [3], [3], [3], [3], [3], [3]] 

,但如果我这样做:

b = [[] for _ in range(10)] 
b[0].append(3) 

b为现在:

[[3], [], [], [], [], [], [], [], [], []] 

还要注意的是

10*[[]] == [[] for [] in range(10)] 

返回

True 

+0

[列表变化列表反映跨过子列表意外](HTTPS(在Python 3.6.1测试):// stackoverflow.com/q/240178/2301450) – vaultah

回答

3
because: 
    >>> b = 10*[[]] 
    >>> b[0] is b[1] 
    True 
    >>> b = [[] for _ in range(10)] 
    >>> b[0] is b[1] 
    False 
    >>>