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

list和变量的指向问题

t = ('a', 'b', ['A', 'B'])
L = t[2]
L[0] = 'X'
L[1] = 'Y'
print t

a=2
r=('a','b',a)
print r
a=3
print r

问题1:这两段程序都是通过tuple,一个指向变量,一个指向list,为什么在list改变时tuple也随之改变,解释为指向未变,而在变量值改变时tuple不变?

问题2:a=3;这个过程不应该是在内存生成3,生成a,然后指向吗?和list类似?

正在回答

3 回答

嗯,对于问题1,我觉得应该是L[2]指向的是列表,当列表的指向发生改变的时候,与tuple无关,所以列表中的元素可以改变。但r[2]指向的数字2.当变量a改变时,是又指向了数字3,相当于新生成了一个变量,与原来的变量已经无关了。可参考http://blog.csdn.net/longshenlmj/article/details/13773977

对于问题2,这个过程相当于新生成了变量,或者说是一个指向数字3的指针。对于指针的指向来说,可以说是类似的。

以上是我的一点理解,欢迎交流。

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

温水中的青蛙4014529 提问者

谢谢你的回答,谢谢文章链接
2016-09-24 回复 有任何疑惑可以回复我~
#2

yinyanting 回复 温水中的青蛙4014529 提问者

嘻嘻,共同进步!
2016-09-26 回复 有任何疑惑可以回复我~

哈哈,老师的习惯。。。

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

问题1:tuple的元素是不可变的,指向的第三个元素是列表,元组指向列表的地址,修改的是列表的内容,列表的地址没有变化,所以元组仍然是指向列表的

问题2 :a指向2的地址,r的元组中有a,元组连接到了这个地址,所以元组指向的是2的地址,后面给a赋值3 ,这时a指向了3的地址,但是元组仍然是指向原来的地址

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

温水中的青蛙4014529 提问者

那list不是这样的原理?元组中含list,list指向AB的地址,所以元祖连接到了AB这个地址,所以元组指向的是AB的地址,后面给list赋值XY ,这时list指向了XY的地址,但是元组仍然是指向原来的地址
2016-09-24 回复 有任何疑惑可以回复我~
#2

温水中的青蛙4014529 提问者

感谢你的回答,已经理解。
2016-09-24 回复 有任何疑惑可以回复我~

举报

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

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

进入课程

list和变量的指向问题

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