Python中的可变数据类型和不可变数据类型

Python的基本数据类型大致可分为6类:1.Number(数字) 2. String(字符串) 3. Tuple (元组) 4. List(列表) 5. Dictionary (字典) 6. Sets(集合) (bool布尔类型、int整型、float浮点型、complex复数等都归为Number数字类型)

这6种类型又可以分为可变类型和不可变类型,其中不可变类型有:Number(数字)  String(字符串) Tuple (元组)。可变类型有: List(列表) Dictionary (字典) Sets(集合)。

 

不可变数据类型:不可变数据类型的变量在第一次赋值声明(由于是解释型语言,python中声明和定义是分不开的,即出现给变量赋值就会分配其相应的内存空间。)的时候, 会在内存中开辟一块空间, 用来存放这个变量被赋的值, 存放这个值的内存空间就是内存中的一个地址, 而这个变量实际上存储的, 并不是被赋予的这个值, 而是存放这个值所在空间的内存地址, 通过这个地址, 变量就可以在内存中取出数据了。 所谓不可变就是说, 我们不能改变这个数据在内存中的值, 所以当我们改变这个变量的赋值时, 只是在内存中重新开辟了一块空间, 将这一条新的数据存放在这一个新的内存地址里, 而原来的那个变量就不在引用原数据的内存地址而转为引用新数据的内存地址了。

简单地说(id是获取内存地址的值):

>>> a=5

>>> id(a)

140708493550352

>>> a=7

>>> id(a)

140708493550416

>>> id(5)

140708493550352

也就是说a=5的时候,首先开辟了一个内存把5放进去,a只是相当于这个内存中的引用而已,而即使a=7之后,我们依然可以发现放5的内存仍然在。当然,重新运行程序的话,id(5)不一定会是同样的值。

 

可变数据类型:当你第一次赋值声明了一个可变数据类型的时候, 同样会在内存中开辟一个空间, 并且将你所赋的数据值放在这块内存中, 然后将这个变量指向数据所在的内存所在位置, 不同的是, 可变数据类型可以对内存中的数据进行修改, 并且不会导致变量引用地址的变化, 但是这种修改仅限于Python中的内置方法, 比如list.append(), list.remove(), dict.pop(), dict.clear()等, 如果要是进行重新赋值的操作的话, 一样会改变变量的地址指向(即使你使用同样的值,比如数组[1,2,3])。而且当变量重新指向了新的内存之后,之前的内存也就被自动回收了。

(例如:

>>> a = [1, 2, 3]

>>> id(a)

41568816

>>> a = [1, 2, 3]

>>> id(a)

41575088

>>> a.append(4)

>>> id(a)

41575088

>>> a += [2]

>>> id(a)

41575088

>>> a

[1, 2, 3, 4, 2]

不过我们也可以发现

>>> id([1,2,3])

2862503824648

>>> id([1,2,3])

2862506945224

也就是说两次[1,2,3]用的不是同一个内存里面的[1,2,3]了,即存放前一个[1,2,3]的内存已经被回收

 

转载请标明出处,原文地址:https://blog.csdn.net/come_from_pluto

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值