Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Непонятное присвоение листа 
V
    Опции темы
sgrey
Дата 23.10.2011, 06:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 15.4.2006

Репутация: нет
Всего: 4



После выполнения комманд в приведённом коде, почему-то при последней команде меняется L. Т.е. получается что значение в листе q также присваивается в последний вложенный эелемент в L. Не могу понять почему так происходит? или это какой-то хак в питоне?
Код

         L = [24, None]

        t = [13, None]
        t[1] = L
        L = t

        t = [28, None]
        t[1] = L[1]
        L[1] = t    # вот здесь L = [13, [28, [24, None]]]

        t = [3, None]
        p = L
        while p != None :
                q = p
                p = p[1]

        q[1] = t  #вот здесь происходит модификация  L, [13, [28, [24, [3, None]]]]


PM MAIL   Вверх
Stolzen
Дата 23.10.2011, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

Репутация: 1
Всего: 48



если нужно скопировать (склонировать) массив, используйте slice:

q = p[:]

Тогда и не будет модификации листа. 


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
sgrey
Дата 23.10.2011, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 15.4.2006

Репутация: нет
Всего: 4



мне нужно понять почему так просиходит. указателей в коде вроде бы нет, сам лист L вообще не трогается - почему при присвоении значения к q, также меняется L ? 

Это сообщение отредактировал(а) sgrey - 23.10.2011, 18:10
PM MAIL   Вверх
cutwater
Дата 24.10.2011, 07:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 592
Регистрация: 24.6.2008

Репутация: 1
Всего: 10



Цитата(sgrey @  23.10.2011,  17:07 Найти цитируемый пост)
мне нужно понять почему так просиходит. указателей в коде вроде бы нет, сам лист L вообще не трогается - почему при присвоении значения к q, также меняется L ? 


Указатели вроде бы нет, зато есть ссылки.
Потому что внезапно в python все есть ссылка, и L, t - ссылки и элементы списков тоже ссылки.


--------------------
user posted image
PM MAIL   Вверх
sgrey
Дата 24.10.2011, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 15.4.2006

Репутация: нет
Всего: 4



вроде понял - когда присваем полностью новое значение к любому листу - то все данные остаются, но если меняем елемент - на него сохраняется ссылка. Спасибо. Забыл про это совсем
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0445 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.