关于赋值和深浅拷贝不懂的问题
在零基础学python的13讲课后题,有个作业是这样的。>>> old =
>>> new = old
>>> old =
>>> print(new)
结果print出的是
但是不知道为什么不是,不是这个列表赋值给了new吗,那old和new应该共享这个列表的数据啊,old变的话new也应该变,现在却不变了,不懂。求助,谢谢!
来看这张图,介绍一下id()这个内置函数
返回对象内存地址,你看new=old后,它们确实指向一个内存地址,所以old append了,new也跟着append了,
但是你再重新赋值了old的后,就相当于是一个新的变量(只是名字和之前那个一样,然而你看它的内存地址和以前是不一样的)所以这个old和之前的old或者是new都没有关系。 python中变量名只是标签而已,可以多个标签指向同一块内存
new=old
意味着new和old这两个标签指向了同一块内存
所以你对new和old指向的数据进行改动,比如列表的pop,sort,reverse等操作都会对两者同时产生作用,因为他们修改了内存中的数据
而你将old重新赋值,意味着old标签指向另外一块内存,从此old和new再无瓜葛 新手·ing 发表于 2019-7-10 07:44
来看这张图,介绍一下id()这个内置函数
返回对象内存地址,你看new=old后,它们确实指向一个内存地址, ...
哇,原来是old重新赋值后新旧指向内存不同的问题,谢谢大佬啦!! BngThea 发表于 2019-7-10 09:08
python中变量名只是标签而已,可以多个标签指向同一块内存
new=old
意味着new和old这两个标签指向了同一 ...
那如果我将old拷贝一份new出来,即使两份一样的列表内容,内存也是不一样的吧? winter宇 发表于 2019-7-10 19:25
那如果我将old拷贝一份new出来,即使两份一样的列表内容,内存也是不一样的吧?
如果要实现这样的结果,你需要用copy函数实现 假如对象是个列表,赋值会改变原来的列表内容,但是拷贝是原来列表,有啥就是啥,拷贝后原来的列表改变但是不影响拷贝的列表,
页:
[1]