Python可变数据类型和不可变数据类型在内存分配策略上的一些差异

目录

一、不可变数据类型

二、可变数据类型

三、两种数据类型在内存空间分配上的差异


一、不可变数据类型

不可变类型的数据在创建后其内容不能改变。如果尝试修改它们,会生成一个新的对象,而原来的对象保持不变。常见的不可变类型包括:

  1. 整数(int)

  2. 浮点数(float)

  3. 字符串(str)

  4. 元组(tuple)

  5. 布尔值(bool)(实际上是int的子类,True和False分别对应1和0)

  6. frozenset(不可变的集合)

二、可变数据类型

可变类型的数据在创建后其内容可以被修改。常见的可变类型包括:

  1. 列表(list)

  2. 字典(dict)

  3. 集合(set)

三、两种数据类型在内存空间分配上的差异

  • 当两个变量数据类型相同且都是不可变数据类型时,若他们内容相同,内存管理器会为它们分配同一片内存空间。

a = 66
b = 66
print(id(a) == int(id(b))) #整数是不可变数据类型,输出True,表示它们指向同一个内存地址

c = "helloworld"
d = "helloworld"
print(id(c) == id(d)) #字符串是不可变数据类型,输出True,表示它们指向同一个内存地址

e = (1, 2, 3, 4, 5)
f = (1, 2, 3, 4, 5)
print(id(e) == id(f)) #元组是不可变数据类型,输出True,表示它们指向同一个内存地址

c4c4457aa2974f5cbdfc966598df6971.png

不可变数据类型的数据内容不会发生变化,两个相同的数据无论进行什么操作内容都会一直相同,所以内存管理器会为它们分配相同的内存空间。

  • 当两个变量数据类型相同且都是可变数据类型时,若他们内容相同,内存管理器会为它们分配不同的内存空间。

 a = [1, 2, 3, 4, 5]
 b = [1, 2, 3, 4, 5]
 print(id(a) == id(b))  #列表是可变数据类型,输出False,表示它们指向不同的内存地址
 ​
 c = {"k1": "v1", "k2": "v2", "k3": "v3"}
 d = {"k1": "v1", "k2": "v2", "k3": "v3"}
 print(id(c) == id(d))  #字典是可变数据类型,输出False,表示它们指向不同的内存地址
 ​
 e = {1, 2, 3}
 f = {1, 2, 3}
 print(id(c) == id(d))  #集合是可变数据类型,输出False,表示它们指向不同的内存地址

5939fcaa37dc4892a4c642691406ff3d.png

因为可变数据类型的数据内容可能会发生变化,两个相等的数据进行某些操作后内容可能变的不同,所以内存管理器会为它们分配不同的内存空间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值