可变类型和不可变类型的区别
1、可变类型,值可以改变:
list列表
dict字典
可变类型,添加或者修改数据时,变量对应的内存地址不会改变。也就是可变类型,一直在引用原来的内存地址。
注意,如果是重新赋值,内存地址就会发生改变。
而del 变量名 则只是删除一个指针,不删除变量。
2、不可变类型,值不可以改变:
数值类型int、long、bool、float
字符串str
元组tuple
不可变类型,一旦被重新赋值,变量对应的内存地址就会发生改变。
提示:
1. 不可变类型的数据作为实参传递, 修改形参不影响实参
2. 可变类型的数据作为实参传递, 修改形参会导致实参跟着变化。但是形参赋值不会改变实参。
代码示例:
def selfAdd(a): ''' 自己增加 ''' a += a # 运算符改变参数的值 # a = a + a # 赋值改变参数的值。形参赋值,不会改变可变类型的实参。 if __name__ == '__main__': print("不可变类型") a_int=1 print(a_int) selfAdd(a_int) print(a_int) print("可变类型") a_list=[1,2] print(a_list) selfAdd(a_list) print(a_list)
输出:
不可变类型
1
1
可变类型
[1, 2]
[1, 2, 1, 2]
延伸:
1 、id()
查看变量的内存地址。
id(c)
2 、引用计数
一个变量值,有多少个变量名绑定在上面,引用计数就为几。
import sys
sys.getrefcount(a) #该命令本身也算一个引用。所以引用数会多1个
512以内的数字,不适用。