目录
一、不可变数据类型
不可变类型的数据在创建后其内容不能改变。如果尝试修改它们,会生成一个新的对象,而原来的对象保持不变。常见的不可变类型包括:
-
整数(int)
-
浮点数(float)
-
字符串(str)
-
元组(tuple)
-
布尔值(bool)(实际上是int的子类,True和False分别对应1和0)
-
frozenset(不可变的集合)
二、可变数据类型
可变类型的数据在创建后其内容可以被修改。常见的可变类型包括:
-
列表(list)
-
字典(dict)
-
集合(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,表示它们指向同一个内存地址

不可变数据类型的数据内容不会发生变化,两个相同的数据无论进行什么操作内容都会一直相同,所以内存管理器会为它们分配相同的内存空间。
-
当两个变量数据类型相同且都是可变数据类型时,若他们内容相同,内存管理器会为它们分配不同的内存空间。
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,表示它们指向不同的内存地址

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

被折叠的 条评论
为什么被折叠?



