Python的可变与不可变数据类型

不可变数据类型

当变量的值发生变化,地址也会改变

本质:是变量的 引用 指向 新的内存地址

类似:户口本,结婚后,从原户口本迁出,成立新户口本,地址当然改变

可以作为字典的key

可变数据类型

当变量的值发生变化,地址不变

本质:当变量的值发生变化(即对变量进行append、+=等操作后),只是改变了变量的值,变量的 引用 没有 指向 新的内存地址

类似:班级学生名单,正常转入、转出学生,班级地址、名称不需要改变

获取内存地址

通过函数 id() 获得变量指向的内存地址

i=1
print(id(i))
i=2
print(id(i))

练习1

s='hello'
s2='hello'
print(id(s))
print(id(s2))

答案:内存地址相同,因为python做了优化,当变量的引用指向的字符串相同时,其实是指向同一个内存地址

练习2

l=['hello']
l2=['hello']
print(id(l))
print(id(l2))

答案:l和l2的地址不同,因为list是可变数据类型,所以必须分配两个地址


原文出处:/show_1EF1PjgXj0uw.html