Найти - Пользователи
Полная версия: Списки и кортежы (list vs cortege) заставляем кортеж меняться :)
Начало » Python для экспертов » Списки и кортежы (list vs cortege) заставляем кортеж меняться :)
1 2 3
sypper-pit
bismigalis
в том то и фишка, что сам tuple не меняется. А вот данные внутри него можно поменять таким образом. Т.Е. на лету поменять данные внутри кортежа. Посмотри первый пример.
>>> a = [3]
>>> b = 2
>>> c = (a,b)
>>> c
([3], 2)
>>> a[0] = 1
>>> c
([1], 2)
>>>
Иначе чтоб поменять данные внутри кортежа нужно его перезаписать, а тут ненужно этого делать.
Budulianin
sypper-pit
Просто я подумал, что кортежи хранят внутри себя только сами данные и никак нельзя их изменить
Все коллекции хранят ссылки на объекты, а не сами объекты.

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

Странные вещи пишешь и пишешь.
sypper-pit
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
Вот к примеру как пробуем это использовать
>>> 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'
Вот в чем прикол.
ATOM
Кортежи не поддерживают никаких операций непосредственного изменения
А в предыдущем посте ты изменял объект типа list или dict на который указывает ссылка в кортеже.
sypper-pit
Мы с этим уже давно разобрались. Теперь задача как можно умудрится его поменять налету . Говорю же задача скорее просто экспериментальная нежели практическая.
ATOM
Кортежи не поддерживают никаких операций непосредственного изменения
Согласен, что нужно перезаписать кортеж чтоб получить изменённые данные. В этом то и прикол как это сделать без запуска c = (a,b) и мной был найден такой способ. Те практически изменение данных произошло и система выдаст то что нам нужно не производя лишних телодвижений.
Shaman
Почему существуют copy и deepcopy у находителя способов вопроса не возникает?
sypper-pit
и как тут нам поможет “глубокое копирование”. если сам кортеж нужно изменить не перезаписывая его повторно отправив запрос.
c = (a,b)
Shaman
Глубoкое и не очень копирование упомянуто к пониманию принципа неизменности tuple.
По основному вопросу: используйте list.
Shaman
Если бы tuple замораживал состояние хранимых объектов, тогда было бы невозможно в нём содержать что-то более-менее сложное.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB