-5 do 256 zasięg ma do czynienia z following:
Obecna implementacja utrzymuje tablicę obiektów całkowitą dla wszystkich liczb całkowitych między -5 i 256, po utworzeniu int
w tym przedziale ty w rzeczywistości wystarczy odwołać się do istniejącego obiektu.
Aby to wykazać, zauważyć, jak id(123)
utrzymuje powrót tą samą wartość, natomiast id(9999)
może zwracać różne wartości:
In [18]: id(123)
Out[18]: 9421736
In [19]: id(123)
Out[19]: 9421736
In [20]: id(9999)
Out[20]: 9708228
In [21]: id(9999)
Out[21]: 10706060
Jest to oczywiście artefaktem bieżącej realizacji. Inna implementacja w języku Python może tego nie robić lub może używać innego zakresu.
Co do ostatniego przykładu:
In [14]: a=[999999, 2, 3]
In [15]: b=a[:]
In [16]: map(id, a)
Out[16]: [10908252, 9421180, 9421168]
In [17]: map(id, b)
Out[17]: [10908252, 9421180, 9421168]
Jak widać, [:]
prostu kopiuje referencje. To wyjaśnia, dlaczego a[i] is b[i]
ma wartość True
dla wszystkich i
.
Chyba jesteś mylące dwie dziwne rzeczy: 1) 'b = a [:]' kopiuje odniesienia do wszystkich liczb całkowitych, więc 'b [0]' wskazuje na tę samą int, co 'a [0]', a 'a [0] to b [0]' zwraca 'True'. 2) numery pozycji od -5 do 256 są przechowywane przez cały czas. – Shep