[[],[]]和[[]]*2之间有什么区别?

hel*_*.co 5 python

t0 = [[]] * 2                                                                   
t1 = [[], []]                                                                   

t0[0].append('hello')                                                           
print t0                                                                        

t1[0].append('hello')                                                           
print t1             
Run Code Online (Sandbox Code Playgroud)

结果是

[['hello'], ['hello']]
[['hello'], []]
Run Code Online (Sandbox Code Playgroud)

但我无法区分它们.

lvc*_*lvc 10

当你这样做时[[]] * 2,它会给你一个包含两个相同列表的列表,而不是两个列表.这就像做:

a = []
b = [a, a]
Run Code Online (Sandbox Code Playgroud)

制作包含多个不同空列表(或其他可变对象)的列表的常用方法是:

t1 = [[] for _ in range(5)]
Run Code Online (Sandbox Code Playgroud)


jam*_*lak 7

[[]] * 2 
Run Code Online (Sandbox Code Playgroud)

做一个浅的副本.相当于:

x = []
t0 = [x, x]
Run Code Online (Sandbox Code Playgroud)

然而

t1 = [[], []]
Run Code Online (Sandbox Code Playgroud)

使用两个单独的空列表文字,它们是完全不同的,因此突变一个显然不会改变另一个