为了账号安全,请及时绑定邮箱和手机立即绑定

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
  • 参与学习       758620    人
  • 解答问题       8667    个

学python入门视频教程,让你快速入门并能编写简单的Python程序

进入课程

tuple可变可不变的问题。

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信