I think here is a very strange python code, but i don't know the reason:
In [7]: a = [[]] * 3
In [8]: b = [[], [], []]
In [9]: a == b
Out[9]: True
In [10]: a[0].append(1)
In [11]: b[0].append(1)
In [12]: a == b
Out[12]: False
In [13]: a
Out[13]: [[1], [1], [1]]
In [14]: b
Out[14]: [[1], [], []]
Why a is [[1], [1], [1]]
after a[0].append(1)
?
A similar problem is:
In [15]: c = dict.fromkeys(range(3),[])
In [16]: d = {0:[], 1:[], 2:[]}
In [17]: c == d
Out[17]: True
In [18]: c[0].append(1)
In [19]: d[0].append(1)
In [20]: c == d
Out[20]: False
In [21]: c
Out[21]: {0: [1], 1: [1], 2: [1]}
In [22]: d
Out[22]: {0: [1], 1: [], 2: []}
In my understand, a
is b
, and c
is also equal to d
, but it isn't. WHY? can anyone help me? Thanks very much!