Python list内容的改变问题
Pyhton 新手。
今天看教程的时候实验了如下代码:
old = 'abc'
old.replace('a','A')
print old
这里old 并没有被替换,这个我可以理解,因为replace方法返回了一个新的对象,old仍指向原对象。
所以打印的仍然是abc
替换成:
old = 'abc'
new = old.replace('a','A')
print new
即可。
结果就是Abc了。
但是,又想到了这个问题,代码如下:
stu1 = 'Tom'
stu2 = 'John'
classMates = [stu1,stu2]
print classMates
stu2 = 'Marry'
print classMates
结果却是:
['Tom','John']
['Tom','John']
而不是预期的:
['Tom','John']
['Tom','Marry']
如果再对list赋值一次:
classMates = [stu1,stu2]
就可以得到想要的效果。
所以想问的是list创建的时候指向的是stu1和stu2的位置么,为什么stu2中的内容变了list中的不会变呢?
还是像最开始的那个例子一样,产生了一个新的list?现在的classMates没有指向更改后的list而是还是指向原来的list?
谢谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
你要知道 Python 里的赋值操作的意义是什么:
最简单的赋值,如
a = b
,是将b
所指称的对象与名字a
关联起来,这样你就可以用名字a
来指称这个对象了。所以,你的代码的意思是:
stu2
中没有内容,它只是名字。名字可以指称一个对象。理解而不是记忆!Python 不是 C!更不是 C++!
忘记了贴一个相关的回复。
这两句创建了两个字符串对象:'Tom' 和 'John' 并将这两个对象的引用赋值给 stu1 跟 stu2。
两个字符串对象成为了list的元素 引用计数分别+1,就是2
'John'的引用计数-1 'Marry'引用计数+1
本来进来是打算看,list是怎么实现动态扩容的。比如java的arrayList 扩容是当前容量的1.5倍,以及扩容时机。 但是这些底层实现,pyhon都不重视啊!
记住list和变量的区别。list是引用的。list 和list2 指向的都是同一个地址
变量不是引用的。