本文共 357 字,预计阅读时间 1 分钟。
immutable 是很多 dalao 的文章里常见的词,意思是“不可变的”。Python 中也有可变类型和不可变类型,本文简单解释它们之间的区别,辅助理解即可。
这里有两个函数:
1 | def f1(x=0): |
运行 f1() 三次结果均为 1,但运行 f2() 三次的结果却是 [1],[1,1],[1,1,1]。
通常的解释为:int() 为不可变类型,而 list() 为可变类型。这里将两者区别用中文整理如下:
1 | x = 0 |
两者运行时的实际状态如下图,不妨说可变和不可变是针对变量指向的实际数据而言的。
程序默认会从优先从内存中查找默认值的变量及指针是否已设置,除了第一次执行函数,后两次的默认值实际是从内存中取得的。①处改变了x的指向,却未改变值为0的内存中储存的值(因为不可变);②处则没有改变x的指向(因为内存中的值可变),但改变了原值为[]的内存中的值,故输出有别。
P.S. 常见不可变类型有:
数值:int()
, float()
, complex()
序列:str()
, tuple()
, frozenset()
, bytes()
其余可认为是可变类型
参考:https://stackoverflow.com/questions/8056130/immutable-vs-mutable-types