Я создал список внутри которого есть словарь и два целых числа. Когда я внутри этого списка изменяю значение у числа, то меняется соответственно и адрес числа внутри списка 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