X = [ [ None ] * 2 ] * 2
X[0][1] = 1
print X
Daje wynik [[None, 1], [None, 1]]
skad to się bierze?? gdy interpreter daje oczekiwany wynik:
>>> a=[[None, None], [None, None]]
>>> a[0][1]=1
>>> print a
[[None, 1], [None, None]]
X = [ [ None ] * 2 ] * 2
X[0][1] = 1
print X
Daje wynik [[None, 1], [None, 1]]
skad to się bierze?? gdy interpreter daje oczekiwany wynik:
>>> a=[[None, None], [None, None]]
>>> a[0][1]=1
>>> print a
[[None, 1], [None, None]]
Odpowiedź jest stosunkowo prosta.
#1.
Referencja
#2
Brak referencji.
Nie ma tu zależności pomiędzy plikiem a interpreterem.
Jest różnica w kodzie :)
Tworząc obiekt w liście i mnożąc te listę (nie będącą zagnieżdżoną) w celu redukcji zużycia pamięci, interpreter tworzy referencje.