python 赋值奇特现象

a= [0]*2
a
Out[34]: [0, 0]
a[0] =1
a
Out[36]: [1, 0]
a= [0]*2
a[0] = datetime(2019, 3, 1)
a
Out[39]: [datetime.datetime(2019, 3, 1, 0, 0), 0]
a= [[0]*2]*3
a
Out[41]: [[0, 0], [0, 0], [0, 0]]
a[0][0] = datetime(2019, 3, 1)
a
Out[43]: 
[[datetime.datetime(2019, 3, 1, 0, 0), 0],
 [datetime.datetime(2019, 3, 1, 0, 0), 0],
 [datetime.datetime(2019, 3, 1, 0, 0), 0]]

有兴趣的朋友研究下。

可能因为[0] * 2是一个数组的对象,再* 3的话只是把对象的引用复制了3次
正确的做法:
way1:
a= [[0 for i in range(2)] for j in range(3)]
way2:
a= [[0] * 2 for j in range(3)]

你可能感兴趣的:(python 赋值奇特现象)