Python中的变量以及变量赋值

Python变量的实现方式

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


Python数据类型

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

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


Python中变量赋值

重点: 有一点必须牢记,即对于不可变数据类型来说,相同的值具有唯一的内存空间地址,不同的值的内存空间地址是不同的;但是对于可变数据类型来说,对于可变数据类型,相同值对应的内存地址是否相同,和具体赋值方式有关。常见赋值方式有四种,分别是直接赋具体值=赋值浅拷贝深拷贝,下面具体讨论:

1)不可变数据类型

对于不可变数据类型来说,上面提到,相同值具有唯一的内存空间地址,所以四种赋值方式,他们会具有相同的内存地址,如下图:
在这里插入图片描述

2)可变数据类型——元素全为不可变数据类型

在这里插入图片描述
如上图所示,对于可变数据类型,如果其所有元素都为不可变数据类型时,赋具体值浅拷贝深拷贝这三种方式均会产生一个新的内存地址,=赋值这种方式并不会产生新的内存地址。
在这里插入图片描述
继续看,由于其所有元素都为不可变数据类型,所以这些相同元素对应唯一的内存地址,如上图。

3)可变数据类型——元素中含有可变数据类型

在这里插入图片描述
如上图所示,对于可变数据类型,如果其元素含有可变数据类型时,赋具体值浅拷贝深拷贝这三种方式同样均会产生一个新的内存地址,=赋值这种方式并不会产生新的内存地址,这是和第2)中情况一致的。但是,对于其中那个可变数据类型的元素的内存地址,不同赋值方式有所不同,如下图,赋具体值方式仍然是产生新的内存地址,=赋值仍然不产生新的内存地址,浅拷贝发生了变化,其也不产生新的内存地址,而深拷贝仍然产生新的内存地址。
在这里插入图片描述
小结一下,对于四种赋值方式,由于不可变数据类型,相同值具有唯一的内存地址,所以四种方式均不产生新的内存地址,他们内存地址相同;对于可变数据类型来说,不管其元素中是否含有可变数据类型,赋具体值深拷贝都会为每一个可变数据类型赋予新的内存地址,=赋值则会为每一个可变数据类型赋予相同的内存地址,而浅拷贝只对最外层的可变数据类型赋予新的内存地址,里面的可变数据类型的元素是无法为其赋予新的内存地址的。
弄清楚了这些,那么碰到可变数据类型中的元素发生变化时就可以理清楚每个变量的值的变化情况了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值