亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

tuple可變可不變的問題。

t = ('a', 'b', ('A', 'B')) t = ('a','b',['0']) print t t = ('a','b',['0']) tuple是不是:不能直接對單個元素賦值,但是可以重新定義整個元組?

4-9這節教學我不能很好的理解。。

正在回答

4 回答

tuple里面存的其實只是指向這個元素的地址,是不可變的,但是地址鎖指向的內存空間里的內容是可以變的,假如你讓t0=x,其實是Python在一個新的地址另外存了一個x,然后讓tuple所指向的地址改為x所在地址,所以這個操作是不被允許的,但是你讓t = ('a','b',['0'])里的0改為其他值例如1,那么就是改變了tuple所指向的['0']所指向的地址(地址的地址),把['0']所指的地址改為指向['1'],但是tuple所指向的地址并沒有變

0 回復 有任何疑惑可以回復我~

tuple里面存的其實只是指向這個元素的地址,是不可變的,但是地址鎖指向的內存空間里的內容是可以變的,加入你讓t0=x,其實是Python在一個新的地址另外存了一個x,所以這個操作是不被允許的,但是你讓t = ('a','b',['0'])里的0改為其他值例如1,那么就是改變了tuple所指向的['0']所指向的地址(地址的地址),把['0']所指的地址改為指向['1'],但是tuple所指向的地址并沒有變

2 回復 有任何疑惑可以回復我~

第一個t寫錯了,第一個t應該是t = ('a', 'b', ['A', 'B'])

回答:list用[]表示,可變;tuple用()表示,不可變。

t = ('a', 'b', ['A', 'B']) ? ?()這個括號里面的是tuple,不可變的意思是,原來三個元素,那就永遠只能是三個元素,且指向相同。 ? ? ? ? []這個括號指的是list,內容是可變的。

這一節的問題就是想說,tuple是不能添加刪除的,但如果tuple中有list,那內容是可變的。如果你想讓tuple內容也保持不變,那就把它改成t=('a','b',('A','B'))

1 回復 有任何疑惑可以回復我~
#1

威威_ 提問者

那對tuple中的list進行修改時,只能像 L[0] = 'X' L[1] = 'Y' 這樣一個一個元素的去賦值嗎?不能直接L = [('A','B')]嗎? 另一個問題,題目和答案:t = ('a', 'b', ['A', 'B']) t = ('a', 'b', ('A', 'B')) print t 這樣不就是直接對tuple進行重新定義了嗎?
2017-05-17 回復 有任何疑惑可以回復我~
#2

chrys 回復 威威_ 提問者

第一個問題,你可以這樣子啊 n=['A','B'] t=('a','b',n) print t 然后如果你要把list中的元素全部改掉的話,直接重新賦值n,不知道是不是理解對了你的意思。
2017-05-17 回復 有任何疑惑可以回復我~
#3

chrys 回復 威威_ 提問者

第二個問題,這個我不明白啥意思了 t = ('a', 'b', ['A', 'B'])這里指可以通過L(0),L(1)賦值讓list中的一部分內容改變。 t = ('a', 'b', ('A', 'B'))這里指不可以改變(('A','B'))中的A或者B,但你可以把整個(A,B)都換掉,就是換掉一個集合。 比如下面這段 n=('A','B') t=('a','b',n) n=('C','D') print t
2017-05-17 回復 有任何疑惑可以回復我~
#4

威威_ 提問者 回復 chrys

抱歉晚上有事現在才看。 一: t = ('a', 'b', ['A', 'B']) t = ('a', 'b', ('A', 'B')) print t 這是4-9教學的問題和答案,我想明白的是:有沒有中間過程?如果沒有的話就是重新定義了,有的話我想知道。 二:你寫的這一段代碼:n=('A','B') t=('a','b',n) n=('C','D') print t 打印的結果是:('a', 'b', ('A', 'B')) 。。。。
2017-05-17 回復 有任何疑惑可以回復我~
#5

威威_ 提問者 回復 chrys

對tuple中的list進行修改時,只能像 L[0] = 'X' L[1] = 'Y' 這樣一個一個元素的去賦值嗎?不能直接L = [('X','Y')]嗎? 二:t = ('a', 'b', ['A', 'B']) t = ('a', 'b', ('A', 'B')) print t 這是教學4-9的問題和答案,它有沒有中間過程?沒有的話就是重新定義整個tuple了咯?有的話我想知道。
2017-05-17 回復 有任何疑惑可以回復我~
#6

chrys 回復 威威_ 提問者

我下午不知道怎么打的。。。打出來是('a', 'b', ('C', 'D'))...抱歉,我答不了你的問題,我也是剛學python不久,看看其他大神們怎么回答
2017-05-17 回復 有任何疑惑可以回復我~
#7

威威_ 提問者 回復 chrys

好唄。。
2017-05-17 回復 有任何疑惑可以回復我~
#8

chrys 回復 威威_ 提問者

我終于明白了,我是這么想的,第一個問題,t = ('a', 'b', ['A', 'B']),你沒辦法用一個L=L(2)的方法把['A', 'B']給指代出來,所以是不能直接L = [('X','Y')],不然這個時候L代表什么,但如果是list就不一樣了,可以用L=L(0)的方法指出來,這樣就可以賦值了。
2017-05-17 回復 有任何疑惑可以回復我~
#9

威威_ 提問者 回復 chrys

第二呢
2017-05-17 回復 有任何疑惑可以回復我~
#10

威威_ 提問者 回復 chrys

可以用L = t[2]把[‘A’,'B']指代出來。。L=L(2)是打錯字嗎?我沒看懂。。
2017-05-17 回復 有任何疑惑可以回復我~
#11

chrys 回復 威威_ 提問者

第一個問題,原來可以用L=t[2]指代出來,謝謝,漲知識了~~ 另外,我打的代碼,這樣可以 t = ('a', 'b', ['A', 'B']) L=t[2] L=['C','D'] t=('a', 'b',L)#是不是忘了這一句 print t 第二我不懂重新定義的含義,但確實是直接將list變成tuple.
2017-05-17 回復 有任何疑惑可以回復我~
#12

威威_ 提問者 回復 chrys

你的代碼也算重新定義吧。 t = ('a', 'b', ['A', 'B']) L=['C','D'] t=('a', 'b',L)#是不是忘了這一句 print t 結果是一樣的。。 明天再回我了,別熬夜。。 加油,一起學。
2017-05-17 回復 有任何疑惑可以回復我~
#13

qq_多一點_1

那如果我想讓元組中第三個元素t[2],也就是列表可變也是允許的?按另一個答案所說這個也沒有改變元素的地址吧 t = ('a', 'b', ['A', 'B']) L = t[2] L[0] = 'c' L[1] = 'd' print t
2018-10-31 回復 有任何疑惑可以回復我~
查看10條回復

我也是初學,以前是做java的,我的理解是,tuple定義好了里面內容是不可以改的,但是像你寫的這個情況,你并沒有改里面內容,你是重新改變了t的引用。

1 回復 有任何疑惑可以回復我~
#1

威威_ 提問者

那對tuple中的list進行修改時,只能像 L[0] = 'X' L[1] = 'Y' 這樣一個一個元素的去賦值嗎?不能直接L = [('A','B')]嗎? 另一個問題,題目和答案:t = ('a', 'b', ['A', 'B']) t = ('a', 'b', ('A', 'B')) print t 這樣不就是直接對tuple進行重新定義了
2017-05-17 回復 有任何疑惑可以回復我~
#2

威威_ 提問者

嗎? 。。
2017-05-17 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
初識Python
  • 參與學習       758382    人
  • 解答問題       8967    個

學python入門視頻教程,讓你快速入門并能編寫簡單的Python程序

進入課程

tuple可變可不變的問題。

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號