Форум сайта python.su
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)
Офлайн
sypper-pitВсе коллекции хранят ссылки на объекты, а не сами объекты.
Просто я подумал, что кортежи хранят внутри себя только сами данные и никак нельзя их изменить
sypper-pit
Вопрос был именно как вытянуть данные используя[0]
Отредактировано Budulianin (Окт. 23, 2014 13:49:36)
Офлайн
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)
Офлайн
Вот к примеру как пробуем это использовать
>>> user0 = {'name' : 'Ivan'} >>> user1 = {'name' : 'Mari'} >>> usersname = (user0, user1) >>> usersname ({'name': 'Ivan'}, {'name': 'Mari'}) >>> usersname[0]['name'] 'Ivan'
>>> user0 = {'name' : 'Ivan00'} >>> usersname[0]['name'] 'Ivan'
>>> user0['name'] = 'ivan123' >>> usersname ({'name': 'ivan123'}, {'name': 'Mari'}) >>> usersname[0] {'name': 'ivan123'} >>> usersname[0]['name'] 'ivan123'
Офлайн
Кортежи не поддерживают никаких операций непосредственного изменения
А в предыдущем посте ты изменял объект типа list или dict на который указывает ссылка в кортеже.
Офлайн
Мы с этим уже давно разобрались. Теперь задача как можно умудрится его поменять налету . Говорю же задача скорее просто экспериментальная нежели практическая.
ATOMСогласен, что нужно перезаписать кортеж чтоб получить изменённые данные. В этом то и прикол как это сделать без запуска c = (a,b) и мной был найден такой способ. Те практически изменение данных произошло и система выдаст то что нам нужно не производя лишних телодвижений.
Кортежи не поддерживают никаких операций непосредственного изменения
Отредактировано sypper-pit (Окт. 23, 2014 15:12:41)
Офлайн
Почему существуют copy и deepcopy у находителя способов вопроса не возникает?
Офлайн
и как тут нам поможет “глубокое копирование”. если сам кортеж нужно изменить не перезаписывая его повторно отправив запрос.
c = (a,b)
Офлайн
Глубoкое и не очень копирование упомянуто к пониманию принципа неизменности tuple.
По основному вопросу: используйте list.
Офлайн
Если бы tuple замораживал состояние хранимых объектов, тогда было бы невозможно в нём содержать что-то более-менее сложное.
Офлайн