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

为什么tuple中list的值可变,而tuple里的普通变量的值改变了tuple打印出来的变量的值确实没改变之前的值?

注:我用的3.6版本,print要加()才能用;

像这样:

a = 12

l = ['a','b','c',1,2,3]

b = (a,l)

print(b)  #结果是(12,['a','b','c',1,2,3])

l = ['d','e','f',4,5,6]

a = 34

print(b)  #结果是(12,['d','e','f',4,5,6])

不是说l指向的地址是不可变的但地址里面的值是可变的吗,那当a里面的值改变时在第二次打印l的时候输出的a不应该是34吗?

正在回答

8 回答

两次结果是一样的,b = (a,l),a是元素,所以不会变 ; l是list,你重新定义了这个对象,所以b会保留原来的对象list...如果想改变里面的内容,只能靠索引来改list的元素,eg: c= b[1] , c[0] = 'd'

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

小小仙草

>>> a=12 >>> l=['a','b','c',1,2,3] >>> b=(a,l) >>> print (b) (12, ['a', 'b', 'c', 1, 2, 3]) >>> l=['a','s','d',3,4,5] >>> a=34 >>> print (b) (12, ['a', 'b', 'c', 1, 2, 3]) >>> l[0]=1 >>> print (b) (12, ['a', 'b', 'c', 1, 2, 3]) 这是为什么?没有改变啊
2019-02-13 回复 有任何疑惑可以回复我~
#2

小小仙草

t = ('a', 'b', ['A', 'B']) S = t[1] print S 为什么这样运行正确 t = ('a', 'b', ['A', 'B']) S = t(1) print S 这样错误? t不是用()来表示吗?​
2019-02-13 回复 有任何疑惑可以回复我~

tuple里只能放"手"进去,并要求"手"所指的指向不准变。那么如果,"手"指向了另一只"手"呢?另一只"手"没有限制,所以可以指向任意一个事物。

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

有一种复合函数的感觉....


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

首先你的代码里a和‘a’是有区别的,a是一个变量,‘a’是一个字母常量,而tuple里的元素必须是指向一个确定的对象,而这个确定的对象是不会变的,也就是说tuple指向他之后它的元素是确定不变的,因此当你不首先给a赋值之前,输入b=(a,l)是会报错误的,当你给a赋了值即a=12,那么a就是一个确定的对象了,此时b=(a,l)实际上是b=(12,l),所以即使后面你再把34赋值给a,也不会对b产生影响。而 l 是也一个特定的list,不会因为l 的元素改变而变为另外一个list,也就是说你可以把它想成是 l1,即使他的元素改变了,它也是 l1,不是另外一个list:l2。因此当改变了l的元素即l=['d','e','f',4,5,6],b所指向的l还是这个l,而l则由原来的指向‘a’,'b','c',1,2,3变成了指向‘d’,'e','f',4,5,6

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

tuple中的元素指向永远不变,元素中如果list,list中的值是可以改变的,但是tuple的指向仍然不变。在代码的最开始就将a赋值了12,这个12不是一个list,所以之后12永远不变。

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

第二次的结果一第一次的结果一模一样。

a = 12

l = ['a','b','c',1,2,3]

b = (a,l) #此处是将a的值放在b[0]中,l 的索引放在b[1]中,如果a改变了,并不影响b[0]的值;l如果被重新赋值,l的索引也就改变了,与b[1]的索引并不一样,但是如果l是改变它所指向的索引中保存的数据,那此时b表现出来的数据才会改变

print(b)  #结果是(12,['a','b','c',1,2,3])

l = ['d','e','f',4,5,6] #这个是将l重新赋值了,l指向的索引也改变了,

a = 34

print(b)  #结果还是(12,['a','b','c',1,2,3])


 

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

小萌新qwq

l = ['d','e','f',4,5,6] #这个是将l重新赋值了,l指向的索引也改变了 这句话没看懂,明白了print(b) #结果还是(12,['a','b','c',1,2,3])中 a是12,因为b = (a,l)是元祖,a的值该变不了,为什么l没有变成 ['d','e','f',4,5,6]啊,求大神解释下
2018-07-15 回复 有任何疑惑可以回复我~

l = ['a','b','c',1,2,3]是一个list,其中l[0]='a',就是指向的值为a,执行l = ['d','e','f',4,5,6]之后,l[0]指向的值为'd',此时改变a的值对l没有影响了。

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

是因为元组里面的元素不能变吧,一开始给a元素赋值为12,那么元组里面的a值就变不了了。

指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的。

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

叫我天秀啊

简单明了
2018-08-11 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
初识Python
  • 参与学习       758625    人
  • 解答问题       8667    个

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

进入课程

为什么tuple中list的值可变,而tuple里的普通变量的值改变了tuple打印出来的变量的值确实没改变之前的值?

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