当前位置:   article > 正文

Python中的变量以及赋值、浅拷贝与深拷贝_python3 赋值空间

python3 赋值空间

Python变量的实现方式

python中变量的实现方式是引用语义,什么意思呢,就是python中的变量对应的是内存地址;与之相对应的是 值语义,即变量对应的是真实值,例如C语言有一种更好的理解方式,把变量看成是一种代号,它的唯一作用就是方便开发者牢记和书写,这样的话引用语义中变量是内存地址的代表,值语义中变量是值的代表。


Python数据类型

既然python中的变量实现方式是引用语义,那么变量代表的内存空间中存储的是什么呢?内存空间中可以存两种类型的东西,一个是值,另一个是内存地址,其中存储值的变量对应的是不可变数据类型,存储内存地址的变量对应的是可变数据类型。如下图所示。

在这里插入图片描述
python中不可变数据类型boolean(有两个值TrueFalse)、intlongfloatstrtuple可变数据类型listdict


Python中赋值

对于不可变数据类型,不同的值会分配不同的内存空间,但是对于相同的值,系统只会分配一个内存空间,他们共用同一个内存空间;对于可变数据类型,不管值是否相同,会为每个值分别分配内存空间。如下图所示。
在这里插入图片描述

由于整数1是不可变数据类型,因此a和b代表的是同一个内存地址,而[1,2,3]是可变数据类型,因此c和d代表的是不同的内存地址。


Python中=、浅拷贝和深拷贝

python中的=,做的仅仅是为同一个内存地址贴上更多的代号,即将新的变量指向该内存地址。如下图。
在这里插入图片描述
不管是可变数据类型还是不可变数据类型,=操作仅仅将新的变量指向原来的内存地址,这样的话同一个内存地址便有多个变量指向它,也就有多个代号了,因为这两个变量除了名字之外其他都一模一样,相当于拷贝了0层。

对于浅拷贝深拷贝的区别,浅拷贝仅仅将变量对应的内存地址复制了一份,生成了一个新的内存地址,该内存地址中存储的其他地址不变,相当于拷贝了1层;而深拷贝除了将变量对应的内存地址复制了,它还将该内存地址中存储的可变数据类型的内存地址复制生成了新的内存地,此时相当于拷贝且仅拷贝了2层。举个例子:
在这里插入图片描述

对于变量对应的内存空间中存储的只有不可变值时,深浅拷贝的结果是一样的,它们分别得到了新的内存空间。

在这里插入图片描述
但是对于变量对应的内存空间中存储的有可变值时,深浅拷贝的结果是不一样的,由于浅拷贝并没有复制一份新的[1,2,3]对应的地址,所以变量aa_shallow[1,2,3]共用同一个内存地址,修改其中的值aa_shallow的值都会变,但是由于深拷贝将[1,2,3]的地址也复制了一份新的,所以它的值并不会受影响。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/71452
推荐阅读
相关标签
  

闽ICP备14008679号