首页 > 技术文章 > python数据结构-可变数据类型与不可变数据类型

xiao-longxia 2020-08-31 18:13 原文

可变数据类型:列表list和字典dict

不可变数据类型:整型int、浮点型float、字符串型string和元组tuple

python中的不可变数据类型,不允许变量的值发生变化,如果改变了变量的值,相当于是新建了一个对象,而对于相同的值的对象,在内存中则只有一个对象,内部会有一个引用计数来记录有多少个变量引用这个对象可变数据类型,允许变量的值发生变化,即如果对变量进行append、+=等这种操作后,只是改变了变量的值,而不会新建一个对象,变量引用的对象的地址也不会变化。

函数默认参数要用元组而非列表

定义函数的默认参数的时候,形如 def foo(attrs=(1,2)): return 之类。这里设定容器类型的默认参数 attrs 使用了元组而不用列表的原因在于:列表作为一种可变类型非常的不靠谱。当脚本执行到函数定义之处的时候,解释器会对参数表达式做一次“预演算”,并把值保存到内存之中,之后每次调用这个函数的时候,都不会再重新运算其参数表达式,而是直接从“预演算”的结果处取值(引用)。所以如果你的默认参数写了一个列表进去,那么每次你调用这个函数时对这个列表所做的更改都会被保存下来。就像这样:

 

>>> def biggest(n, store=[0]):
     store[0] = max(n, store[0])
     return store[0]
 
>>> biggest(3)
3
>>> biggest(9)
9
>>> biggest(5)
9

 

推荐阅读