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