python的可变变量和不可变变量

可变类型和不可变类型的区别
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以内的数字,不适用。

原文地址:https://www.cnblogs.com/andy9468/p/13021987.html