Коментар до Як я можу обійти оголошення оголошення невикористовуваної змінної у циклі for? (Закінчився розмір коментаря)
Python підтримує те саме посилання на створений об'єкт. (незалежно від змінності), наприклад,
In [1]: i = 1
In [2]: j = 1
In [3]: id(i)
Out[3]: 142671248
In [4]: id(j)
Out[4]: 142671248
Ви можете бачити як i, так і j, посилаються на один і той же об'єкт у пам'яті. Що відбувається, коли ми змінюємо значення однієї незмінної змінної.
In [5]: j = j+1
In [6]: id(i)
Out[6]: 142671248
In [7]: id(j)
Out[7]: 142671236
ви можете бачити, що j тепер починає вказувати на нове місце (де зберігається 2), а я все ще вказує на місце, де зберігається 1. Оцінюючи,
j = j+1
Значення вибирається з 142671248, обчислюється (якщо воно ще не кешоване) і поміщається в нове місце 142671236. j робиться для вказівки на нове розташування. Простіше кажучи, нова копія, що робиться щоразу, коли змінюється незмінна змінна.
Змінюваність
Змінні предмети в цьому відношенні діють мало інакше. Коли значення, вказане
In [16]: a = []
In [17]: b = a
In [18]: id(a)
Out[18]: 3071546412L
In [19]: id(b)
Out[19]: 3071546412L
І a, і b вказують на одне і те ж місце в пам'яті.
In [20]: a.append(5)
Розташування пам'яті, вказане символом a, змінено.
In [21]: a
Out[21]: [5]
In [22]: b
Out[22]: [5]
In [23]: id(a)
Out[23]: 3071546412L
In [24]: id(b)
Out[24]: 3071546412L
І a, і b все одно вказують на одне і те ж місце в пам'яті. Іншими словами, змінні змінні діють з тим самим місцем пам'яті, на яке вказує змінна, замість того, щоб копіювати значення, вказане змінною, як у незмінному випадку змінної.