Python中可变类型与不可变类型数据在内存中的引用

在Python中主要有两种数据类型, 一种是可变数据类型, 另一种是不可变数据类型

  • 不可变数据类型

     数字型:  int, float, complex, bool, long
     字符型:  str
     元  祖:  tuple
    
  • 可变数据类型

     列表: list
     字典: dict
    
不可变数据类型

不可变数据类型在第一次声明赋值声明的时候, 会在内存中开辟一块空间, 用来存放这个变量被赋的值, 存放这个值的内存空间就是内存中的一个地址, 而这个变量实际上存储的, 并不是被赋予的这个值, 而是存放这个值所在空间的内存地址, 通过这个地址, 变量就可以在内存中取出数据了. 所谓不可变就是说, 我们不能改变这个数据在内存中的值, 所以当我们改变这个变量的赋值时, 只是在内存中重新开辟了一块空间, 将这一条新的数据存放在这一个新的内存地址里, 而原来的那个变量就不在引用原数据的内存地址而转为引用新数据的内存地址了.
在这里插入图片描述
以上, 所有不可变类型的数据都是这样的引用方式, 包括函数中的形参, 实际上是引用的是实参的内存地址, 函数的返回值, 与其接收值都是一样的内存地址

可变数据类型

当你第一次声明了一个可变数据类型的时候, 同样会在内存中开辟一个空间, 并且将你所赋的数据值放在这块内存中, 然后将这个变量指向数据所在的内存地址, 不同的是, 可变数据类型可以对内存中的数据进行修改, 并且不会导致变量引用地址的变化, 但是这种修改仅限于Python中的内置方法, 比如list.append(), list.remove(), dict.pop(), dict.clear()等, 如果要是进行重新赋值的操作的话, 一样会改变变量的地址指向
在这里插入图片描述

此外, 有一个需要注意的地方就是, 对一个字典的key以及列表的项进行单独更改, 同样是不会改变字典变量或列表变量的内存地址指向的, 但是, 会改变对应的key以及数组项的内存地址, 因为key实质上也是一个变量, 当对它赋值的时候, 也会在内存中开辟一个空间存储其数据, key同样也只是储存着数据在内存中的地址.
在这里插入图片描述

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IsQtion

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值