Mindfuck, W pythonie, słowniki są indeksowane wartością hash obliczoną z klucza. Jako, że występuje kolizja hash'a dla 0 i False oraz odpowiednio 1 i True i 1.0, to dochodzi do poniższego zjawiska.

Wartości True i False nie mają swoich kluczy w wynikowym słowniku poniżej, bo nadpisały wartości 0 i 1.

>>> {k:k for k in (0, 1, 2, 3, 1.0, True, False, None)}
{0: False, 1: True, 2: 2, 3:
Domyślam się ze w pierwszym przypadku 2 wiersze po prostu mają wskaźnik na pierwszy wiersz dlatego wszystkie są identyczne, dobrze rozumuję ?


@misiekkiler: Zamien zapis: matrix = [[0] * 3] * 3 na aa = [0] * 3 i nastepnie wywołaj: matrix = aa * 3 i powinno to być już jasne. Stworzyłeś listę z trzema referencjami do jednej listy aa. Stąd ta propagacja przypisania. Możesz sprawdzić: print(matrix[0] is matrix[1])