Python-可变和不可变类型
1. 不可变类型
不可变类型,内存中的数据不允许被修改(一旦被定义,内存中分配了小格子,就不能再修改内容了):
数字类型
int
,bool
,float
,complex
,long(2,x)
字符串
str
元组
tuple
2. 可变类型
可变类型,内存中的数据可以被修改(可以通过变量名调用方法来修改列表和字典内部的内容,而内存地址不发生变化):
列表
list
字典
dict
(注:字典中的key只能使用不可变类型的数据)
注:给变量赋新值的时候,只是改变了变量的引用地址,不是修改之前的内容
可变类型的数据变化,是通过方法来实现的
如果给一个可变类型的变量,复制了一个新的数据,引用会修改(变量从之前的数据上撕下来,贴到新赋值的数据上)
3. 代码演示
# 新建列表
a = [1, 2, 3]
print("列表a:", a)
print("列表a的地址:", id(a))
print("*"*50)
# 追加元素
a.append(999)
print("列表a:", a)
print("列表a的地址:", id(a))
print("*"*50)
# 移除元素
a.remove(2)
print("列表a:", a)
print("列表a的地址:", id(a))
print("*"*50)
# 清空列表
a.clear()
print("列表a:", a)
print("列表a的地址:", id(a))
print("*"*50)
# 将空列表赋值给变量a
a = []
print("列表a的地址:", id(a)) # 通过输出可以看出地址发生了变化
print("*"*50)
# 新建字典
d = {"name": "xiaoming"}
print("字典d为:", d)
print("字典d的地址:", id(d))
print("*"*50)
# 追加键值对
d["age"] = 18
print("字典d为:", d)
print("字典d的地址:", id(d))
print("*"*50)
# 删除键值对
d.pop("age")
print("字典d为:", d)
print("字典d的地址:", id(d))
print("*"*50)
# 清空所有键值对
d.clear()
print("字典d为:", d)
print("字典d的地址:", id(d))
print("*"*50)
# 对d赋值空字典
d = {}
print("字典d为:", d)
print("字典d的地址:", id(d))
print("*"*50)
4. 运行结果
可变类型(列表和字典)的数据变化,是通过方法(比如append
,remove
,pop
等)来实现的,不会改变地址。而重新赋值后地址会改变。具体运行结果如下图所示:
作者:ZacheryZHANG
来源:juejin.cn/post/7100423532655411213