@nishe

Каким образом изменяется id объектов внутри изменяемых типов данных?

Я создал список внутри которого есть словарь и два целых числа. Когда я внутри этого списка изменяю значение у числа, то меняется соответственно и адрес числа внутри списка id(a[1]) (т.к числа неизменяемый тип данных). Когда я внутри этого списка изменяю значение ключа "name" то соответственно изменяется и адреc значения ключа (id(a["name]). Но при этом сам адрес самого списка не меняется(id(a)).
Как я понимаю происходит следующее: списки в Python это что-то типо массива указателей на объекты, и так как я изменяю элементы внутри этого списка, то получается, что изменяются указатели указателя.
Не понимаю до конца, как работает этот механизм? Если объясните мне это или скинете информации по этой теме, буду благодарен.

a = [{"name" : "Oleg", "surname": "Shishkov"}, 2, 3]
print(a, "  a[1] = ", id(a[1]))
a[1] = 8
print(a, "  a[1] = ", id(a[1]))
print("id(a) = ", id(a))


print(a, "  a[0][\"name\"] = ", id(a[0]["name"]))
a[0]["name"] = "Valerii"
print(a, " a[0][\"name\"] = ", id(a[0]["name"]))
print("id(a) = ", id(a))


Результаты:
[{'name': 'Oleg', 'surname': 'Shishkov'}, 2, 3]   a[1] =  140726124685120
[{'name': 'Oleg', 'surname': 'Shishkov'}, 8, 3]   a[1] =  140726124685312
id(a) =  1311154958912

[{'name': 'Oleg', 'surname': 'Shishkov'}, 8, 3]   a[0]["name"] =  1311157002352
[{'name': 'Valerii', 'surname': 'Shishkov'}, 8, 3]  a[0]["name"] =  1311157094064
id(a) =  1311154958912
  • Вопрос задан
  • 144 просмотра
Решения вопроса 2
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
Тут стр.269-270 кратко поясняется за списки. В общем, ваше понимание близко к истине.
Ответ написан
Комментировать
@Kadabrov
Python размещает элементы списка в памяти, затем размещает указатели на эти элементы. Таким образом, список в Python — это массив указателей.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
Первый сценарий: элемент списка хранил ссылку на одно число (экземпляр типа int), потом стал хранить ссылку на другое. Сам список при этом располагается по тому же адресу, что и раньше.
Второй сценарий: то же самое, но с элементом словаря.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы