Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 22, 2014 19:57:51

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

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

Вобщем говорил я недавно с человечком и напомнил он мне про списки и кортежи. честно говоря много что с годами по вылетало из башки дырявой. я возьми и ляпни что кортежи могут меняться. А потом поседел подумал и оказывается я был прав.

>>> a = [3]
>>> b = 2
>>> c = (a,b)
>>> c
([3], 2)
>>> a[0] = 1
>>> c
([1], 2)
>>>

упс как так получилось вот только засада. Не пойму как вытянуть чистое значение из кортежа.

варианты типа
>>> d = c[0]
>>> d
[123]
>>> d[0]
123
>>> с[0]
и так понятны.
А вот что делать если нужно избавится от скобок в 1 приём. может кто тему развить сможет ?

Отредактировано sypper-pit (Окт. 22, 2014 20:21:35)

Офлайн

#2 Окт. 22, 2014 20:24:58

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

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

sypper-pit
я возьми и ляпни что кортежи могут меняться. А потом поседел подумал и оказывается я был прав.

Tuple не меняется, меняется объект, на который хранится ссылка в tuple. В tuple, как содержалась ссылка на этот объект, так и будет содержаться.

sypper-pit
А вот что делать если нужно избавится от скобок в 1 приём. может кто тему развить сможет ?
Ты вообще о чём?
с[0][0]



Отредактировано Budulianin (Окт. 22, 2014 20:27:38)

Офлайн

#3 Окт. 22, 2014 22:02:03

kamisama
Зарегистрирован: 2014-07-08
Сообщения: 34
Репутация: +  4  -
Профиль   Отправить e-mail  

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

cortege взломан, все в катафалк!

Офлайн

#4 Окт. 23, 2014 01:28:08

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

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

Budulianin
как содержалась ссылка на этот объект, так и будет содержаться.
Хорошо тогда как же получается такой расклад ?
>>> c
([1], 2)
>>> c[0][0]
1
>>> a = 123
>>> c[0][0]
1
>>> c
([1], 2)
>>>
При этом я изменил “a” на другое значение и кортеж не поменялся.
Вероятно имеется в виду ссылка на объект == именно в память ЭВМ. Я тоже так думал по началу, может просто в блок памяти ссылается в которой я произвожу изменения. И для эксперимента я вбил в код значение “a” точно превышающее блок памяти. и изменение произошло. внутри кортежа.

kamisama
cortege взломан, все в катафалк!
Тема создана больше для прикола чем для практического применения, хотя может кому и пригодится эта фича.
Budulianin
Ты вообще о чём?
с[0][0]
да я об этом … только как это сделать минуя
 [0][0]
- это же по сути и есть пример выше только без лишней переменной. Думаю никак не выйдет вытянуть.

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

Офлайн

#5 Окт. 23, 2014 03:32:04

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

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

sypper-pit
вы забыли что переменная это тоже не изменяемый тип:

>>> a=1
>>> id(a)
14282952
>>>
>>> a=2
>>> id(a)
14282940



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#6 Окт. 23, 2014 04:46:28

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

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

Так и получается тогда, что кортеж не создаёт новый блок в памяти, а ссылается на тип переменной.
Возможно это связанно с попыткой сохранить ОЗУ и не забивать её новыми данными.

Офлайн

#7 Окт. 23, 2014 09:58:19

bismigalis
Зарегистрирован: 2010-10-02
Сообщения: 449
Репутация: +  47  -
Профиль   Отправить e-mail  

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

Вот что форкекс окоянный с людьми делает

Офлайн

#8 Окт. 23, 2014 11:39:48

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

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

sypper-pit
Хорошо тогда как же получается такой расклад ?
sypper-pit
При этом я изменил “a” на другое значение и кортеж не поменялся.
sypper-pit
Тема создана больше для прикола чем для практического применения, хотя может кому и пригодится эта фича.

Какая фича? WTF?

Ты просто не понимаешь, что происходит.

>>> c
([1], 2)
>>> c[0][0]
1
>>> a = 123
>>> c[0][0]
1
>>> c
([1], 2)
>>>

Tuple хранит ссылки на объекты. Ну засунул ты в a ссылку на 123, почему ссылка в tuple должна от этого измениться? Это tuple и он не изменяется и точка.

sypper-pit
Зарегистрирован: 2009-01-30
sypper-pit
Сообщения: 1017
WTF!?

>>> a = [1]
>>> b = (a,)
>>> id(a)
4459235232
>>> id(b[0])
4459235232
>>> a = 123
>>> id(a)
140604929500048
>>> id(b[0])
4459235232



Отредактировано Budulianin (Окт. 23, 2014 11:43:11)

Офлайн

#9 Окт. 23, 2014 12:59:49

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

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

Budulianin
Сам tuple не изменятся я об этом знаю. И по идее не должны изменяться данные внутри него. Просто я подумал, что кортежи хранят внутри себя только сами данные и никак нельзя их изменить(не учитывая изменения в блоке памяти итд). Получается что изменить данные всё же можно. И вот в чем был эксперимент.

Вопрос был именно как вытянуть данные используя

[0]
а не
[0][0]
Говорю же это всё несёт чисто экспериментальный характер.

Офлайн

#10 Окт. 23, 2014 13:20:53

bismigalis
Зарегистрирован: 2010-10-02
Сообщения: 449
Репутация: +  47  -
Профиль   Отправить e-mail  

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

sypper-pit
сам себе противоречишь
говоришь что tuple изменяемый и в тоже время не можешь изменить первый элемент тупля с массива на число

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version