python可变类型与不可变类型

在python中一切皆对象。当定义一个变量a=100时,a并不是对象,100才是对象,100是一个int类型的对象。
当定义a=100时,python解释器会在内存中划分一块位置来存100这个数值,这个内存有一个地址,这时变量a就指向了这个地址。

不可变类型:

不可变:是指在系统分配的这个内存地址块中,保存的是100,那这个地址对应的就是100,不能改变。除非这个地址被回收了,然后重新分配了其他的值。
不可变类型:数值类型(int、float、bool)、string(字符串)、tuple(元组)

举例:

在这里插入图片描述
在这里插入图片描述
大概画个图理解一下:
在这里插入图片描述

在这里插入图片描述
对于不可变类型来说:内存中这块地址对应的值是不能改变的,所以如果想要修改变量a的值,就只能让他重新指向一个新的地址,所以此时的id(a)就发生了改变。

可变类型:

可变类型指的是,此处内存地址里面的值是可以改变的。比如set(集合)、list(列表)、dict(字典)
在这里插入图片描述
在这里插入图片描述
对于a = [1,2],方便理解的话,可以这样理解:a是一个变量,[1,2]是一个列表,其内部是int类型对象1,2 可以认为首先有一块地址,这个地址是这个列表的地址,地址里面存放的内容,是1,和2 在内存中的地址。

列表 【 】可以看做是一个索引表,a通过这个索引表寻找内部数据在哪,索引表也需要一个地址空间存放,这个地址空间里面的值可以改变,表内存放的就是内部具体数据在内存中的地址。

在这里插入图片描述
这里的地址是都是一块地址的起始位置,当列表中追加元素时,直接在这块地址空间中追加新元素的地址。对于id(a)来说,始终是不变的。

修改列表元素的值

在这里插入图片描述
在这里插入图片描述

注意一点:

在这里插入图片描述
在这里插入图片描述
这时候并不是对变量a进行更改,这里其实是再次创建了一个列表[1,2,3],让变量a指向了这个新的列表。
所以这时候的地址是不一样的。

自己的理解:

这些列表,字典等可变类型,就像是对那些不可变类型套了一个壳一样,
最内部的数据终究是那些 数字啊,字符串这些不可变的。就好像是用这个壳维护这些内部的数据。

具体这些图到底对不对,是不是我想的这样,我也无法确定,目前还在学习阶段,只能暂时帮助理解一下。
参考:python可变对象与不可变对象

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值