The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"Python опередил Java по числу проектов на GitHub"
Версия для распечатки Пред. тема | След. тема
Форум Разговоры, обсуждение новостей
Исходное сообщение [ Отслеживать ]
Отдельный RSS теперь доступен для каждого обсуждения в форуме и каждого минипортала.
. "Python опередил Java по числу проектов на GitHub" +/
Сообщение от jOKer (ok), 08-Ноя-19, 21:29 
> А почему тогда ругается, если ссылка не меняется?

Потому что ругается не на изменение списка, а на попытку ссылку на список присвоить элементу кортежа. При этом собственно сама ссылка не меняется.

Если разобраться, то тут питон делает последовательно три действия

1. Берет ссылку на список из элемента кортежа
2. Модифицирует список по ссылке
3. Пытается _ту же самую_ ссылку присвоить элементу кортежа.

И вот на третьем действии кортеж и выдает исключение, поскольку присваивать новые значения элементам кортежа нельзя. Но ссылка та же самая, и даже отказавшись выполнить третье действие, он по ней показывает уже новые данные как ни в чем ни бывало. Все логично.

>>> data = (1,2,3,[4,5])
>>> id(data[3])

4401056072
>>> v = data[3]
>>> id(v)

4401056072
>>> data[3] += [0, 1]

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> id(data[3])

4401056072
>>> id(v)

4401056072
>>> v

[4, 5, 0, 1]
>>> data

(1, 2, 3, [4, 5, 0, 1])

Ответить | Правка | Наверх | Cообщить модератору

Оглавление
Python опередил Java по числу проектов на GitHub, opennews, 08-Ноя-19, 08:37  [смотреть все]
Форумы | Темы | Пред. тема | След. тема



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру