Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 23, 2014 13:38:04

sypper-pit
От: Ulan-Ude(msk)
Зарегистрирован: 2009-01-30
Сообщения: 1102
Репутация: +  6  -
Профиль   Отправить e-mail  

Списки и кортежы (list vs cortege) заставляем кортеж меняться :)

bismigalis
в том то и фишка, что сам tuple не меняется. А вот данные внутри него можно поменять таким образом. Т.Е. на лету поменять данные внутри кортежа. Посмотри первый пример.

>>> a = [3]
>>> b = 2
>>> c = (a,b)
>>> c
([3], 2)
>>> a[0] = 1
>>> c
([1], 2)
>>>
Иначе чтоб поменять данные внутри кортежа нужно его перезаписать, а тут ненужно этого делать.

Отредактировано sypper-pit (Окт. 23, 2014 13:39:32)

Офлайн

#2 Окт. 23, 2014 13:49:21

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Списки и кортежы (list vs cortege) заставляем кортеж меняться :)

sypper-pit
Просто я подумал, что кортежи хранят внутри себя только сами данные и никак нельзя их изменить
Все коллекции хранят ссылки на объекты, а не сами объекты.

sypper-pit
Вопрос был именно как вытянуть данные используя
[0]

Странные вещи пишешь и пишешь.



Отредактировано Budulianin (Окт. 23, 2014 13:49:36)

Офлайн

#3 Окт. 23, 2014 14:03:50

sypper-pit
От: Ulan-Ude(msk)
Зарегистрирован: 2009-01-30
Сообщения: 1102
Репутация: +  6  -
Профиль   Отправить e-mail  

Списки и кортежы (list vs cortege) заставляем кортеж меняться :)

Budulianin
Все коллекции хранят ссылки на объекты, а не сами объекты.
Это я уже понял когда по id пробивали.
Budulianin
Странные вещи пишешь и пишешь.
Понимаю что странно и дзена не придерживаюсь. Задача стояла поменять данные внутри кортежа без пересоздания. Это получилось тк если пытаться изменить данные вылетит ошибка. Это и так понятно.
>>> c = (1,2)
>>> c[0]
1
>>> c[0] = 3
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>>

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

Отредактировано sypper-pit (Окт. 23, 2014 14:08:37)

Офлайн

#4 Окт. 23, 2014 14:50:54

sypper-pit
От: Ulan-Ude(msk)
Зарегистрирован: 2009-01-30
Сообщения: 1102
Репутация: +  6  -
Профиль   Отправить e-mail  

Списки и кортежы (list vs cortege) заставляем кортеж меняться :)

Вот к примеру как пробуем это использовать

>>> user0 = {'name' : 'Ivan'}
>>> user1 = {'name' : 'Mari'}
>>> usersname = (user0, user1)
>>> usersname
({'name': 'Ivan'}, {'name': 'Mari'})
>>> usersname[0]['name']
'Ivan'
И тут понадобилось имя пользователя поменять на ivan00 а в системе только кортеж, а не списки.
>>> user0 = {'name' : 'Ivan00'}
>>> usersname[0]['name']
'Ivan'
А вот если взять и воткнуть
>>> user0['name'] = 'ivan123'
>>> usersname
({'name': 'ivan123'}, {'name': 'Mari'})
>>> usersname[0]
{'name': 'ivan123'}
>>> usersname[0]['name']
'ivan123'
Вот в чем прикол.

Офлайн

#5 Окт. 23, 2014 14:56:52

ATOM
Зарегистрирован: 2012-04-01
Сообщения: 8
Репутация: +  1  -
Профиль   Отправить e-mail  

Списки и кортежы (list vs cortege) заставляем кортеж меняться :)

Кортежи не поддерживают никаких операций непосредственного изменения
А в предыдущем посте ты изменял объект типа list или dict на который указывает ссылка в кортеже.



—————
Python 3

Офлайн

#6 Окт. 23, 2014 15:05:58

sypper-pit
От: Ulan-Ude(msk)
Зарегистрирован: 2009-01-30
Сообщения: 1102
Репутация: +  6  -
Профиль   Отправить e-mail  

Списки и кортежы (list vs cortege) заставляем кортеж меняться :)

Мы с этим уже давно разобрались. Теперь задача как можно умудрится его поменять налету . Говорю же задача скорее просто экспериментальная нежели практическая.

ATOM
Кортежи не поддерживают никаких операций непосредственного изменения
Согласен, что нужно перезаписать кортеж чтоб получить изменённые данные. В этом то и прикол как это сделать без запуска c = (a,b) и мной был найден такой способ. Те практически изменение данных произошло и система выдаст то что нам нужно не производя лишних телодвижений.

Отредактировано sypper-pit (Окт. 23, 2014 15:12:41)

Офлайн

#7 Окт. 28, 2014 10:55:11

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Списки и кортежы (list vs cortege) заставляем кортеж меняться :)

Почему существуют copy и deepcopy у находителя способов вопроса не возникает?

Офлайн

#8 Окт. 28, 2014 11:15:13

sypper-pit
От: Ulan-Ude(msk)
Зарегистрирован: 2009-01-30
Сообщения: 1102
Репутация: +  6  -
Профиль   Отправить e-mail  

Списки и кортежы (list vs cortege) заставляем кортеж меняться :)

и как тут нам поможет “глубокое копирование”. если сам кортеж нужно изменить не перезаписывая его повторно отправив запрос.

c = (a,b)

Офлайн

#9 Окт. 28, 2014 11:42:51

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Списки и кортежы (list vs cortege) заставляем кортеж меняться :)

Глубoкое и не очень копирование упомянуто к пониманию принципа неизменности tuple.
По основному вопросу: используйте list.

Офлайн

#10 Окт. 28, 2014 11:46:12

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Списки и кортежы (list vs cortege) заставляем кортеж меняться :)

Если бы tuple замораживал состояние хранимых объектов, тогда было бы невозможно в нём содержать что-то более-менее сложное.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version