当前位置: 首页 > 图灵资讯 > 行业资讯> Python的高级特性:容易忽略的不可变类型

Python的高级特性:容易忽略的不可变类型

发布时间:2025-09-28 11:08:14

Python 有些不可变的Strr类型容易被忽略、Integer、None、Tuple

#错误演示

In[45]:defdemo(lst=[]):
...:lst.append("hello")
...:returnlst
...:

In[46]:demo()
Out[46]:['hello']

In[47]:demo()
Out[47]:['hello','hello']

廖雪峰的 Python 教程中提到了这一块,但并不太详细。在这里,因为 lst 而且是可变参数 demo 在初始化时 lst 参数指向一个 [] 内存空间,然后每次调用,[] 所有这些内存空间 append 一个「hello」,而由于 lst 它仍然指向这个内存空间,所以你会看到它 demo 解决函数调用问题的奇怪现象是引入不可变类型。

#正确演示

In[54]:defdemo(lst=None):
...:lst=[]
...:lst.append("hello")
...:returnlst
...:

In[55]:demo()
Out[55]:['hello']

In[56]:demo()
Out[56]:['hello']

在正确的演示中,将 lst 初始化为 None, 这样 lst 它是一个不可变的参数,但不能直接对准 lst 直接使用 append,因为只有 list 才有 append 方法,所以需要 lst 真正的初始化 lst = []

可变类型和不可变类型是一个容易被忽视的知识点,在这里进行了深入的研究,以下是常见的不可变类型和可变类型。

不可变「mutable」类型:

int, long, float, string, tuple, frozenset

可变类型「immutable」类型:

list, dict

Python中的所有变量都是值的引用,这意味着变量通过绑定指向其值。 而且这里所说的不可变指的是值的不可变。 对于不可变类型的变量,如果需要更改变量,将创建一个新值,将变量绑定到新值,如果旧值不被引用,则等待垃圾回收。以下内容 int 和 list 分别作为代表进行解释。

#不可变类型

In[31]:id(1),id(2)
Out[31]:(4477999936,4477999968)

In[32]:a=1

In[33]:id(a)
Out[33]:4477999936

In[34]:#当a赋予新值时,变量a将绑定到新值上

In[35]:a=3

In[36]:id(a)
Out[36]:4478000000

#可变类型

In[38]:lst=[0]

In[39]:id(lst)
Out[39]:4493976328

In[40]:lst=[0,1]

In[41]:id(lst)
Out[41]:4499600328

表面上看可变类型,python 不同类型的管理模式似乎已经实现,但事实并非如此。其实 lst 代表地址,引用lst[0],lst[1]内存地址实际上已经改变了,因为lst[i]是int(这里),而int是不可变的类型。

相关文章

Python的高级特性:容易忽略的不可变类型

Python的高级特性:容易忽略的不可变类型

2025-09-28
Python中reduce函数和lambda表达式的学习

Python中reduce函数和lambda表达式的学习

2025-09-26
Python小白必学的面向对象

Python小白必学的面向对象

2025-09-26
一个例子解释python装饰器

一个例子解释python装饰器

2025-09-26
深入理解Python的set和dict

深入理解Python的set和dict

2025-09-26
Python中正则表达式的巧妙使用

Python中正则表达式的巧妙使用

2025-09-26