ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

探索 Python 的秘密:可变性、内存和效率之旅

2024-03-17 20:16:38  阅读:139  来源: 互联网

标签:print 可变性 内存





今天,我们将踏上一段激动人心的旅程,了解 Python 的内部工作原理。我们将揭开可变性和不可变性的层面,探索对象如何存储在内存中,并揭示 Python 的一些有趣的优化技巧。因此,系好安全带,准备好踏上充满见解和启示的旅程吧!

ID 和类型


想象一下:Python 中的每个对象都有其独特的身份和鲜明的个性,我们称之为类型。每个对象都有其在计算机内存中的地址以及一组定义其功能的特征。
```python
x = 5
print(id(x)) # 输出:140719257121760
print(type(x)) # 输出:<class 'int'>
```

可变对象


现在,我们来谈谈可变对象——它们是 Python 世界的变形者!想想列表、字典和集合。您可以添加、删除或更改其中的元素,它们会在不改变其身份的情况下愉快地进行调整。这就像拥有一个粘土球,您可以随心所欲地塑造它!
```python
my_list = [1, 2, 3]
print(id(my_list)) # 输出:140719177831808
my_list.append(4)
print(my_list) # 输出:[1, 2, 3, 4]
print(id( my_list)) # 输出:140719177831808 (还是一样!)
```

不可变对象


另一方面,我们有不可变的物体——比如蒙娜丽莎,不变且永恒。字符串、整数和元组都属于这一类。一旦创建,您就无法对其进行调整。任何修改它们的尝试都会创建一个具有不同身份的全新对象。

```python
my_string = “hello”
print(id(my_string)) # 输出:140719257223280
my_string += “world”
print(my_string) # 输出:hello world
print(id(my_string)) # 输出:140719177777680 (新身份) !)
```

不可变对象如何存储在内存中


Python 中的不可变对象作为单独的实体存储在内存中。当您修改不可变对象时,Python 将创建一个具有更新值的新对象,而原始对象保持不变。

为什么它很重要以及 Python 如何区别对待它们?

现在,为什么这一切都很重要?Python 以不同的方式对待可变对象和不可变对象,尤其是在内存管理和变量分配方面。可变对象允许就地更改,而不可变对象通过在修改时创建新副本来保持其完整性。

赋值与引用


赋值涉及给对象命名,而引用则涉及指向现有对象。在 Python 中,变量只是引用对象的名称,因此当您为变量分配值时,您正在引用保存该值的对象。

将参数传递给函数


当您将参数传递给 Python 中的函数时,您传递的是对对象的引用,而不是对象本身。这有一些令人难以置信的含义!即使函数结束后,对函数内可变对象所做的更改也会保留,而不可变对象仍保持原始状态。
```python

def modify_list(lst):
lst.append(4)

my_list = [1, 2, 3]
修改_list(my_list)
print(my_list) # 输出:[1, 2, 3, 4]

```

整数预分配


默认的 Python 解释器 CPython 预分配前 262 个整数(从 -5 到 256)以提高性能和内存使用率。这些整数在解释器启动时创建,并在程序执行过程中重复使用。

别名和 |NSMALLPOSINTS| 的机制 /|NSMALLNEGINTS|

Python 中的别名是引用同一对象的多个名称。让我们通过 |NSMALLPOSINTS| 来重点关注 Python 的优化能力 和|NSMALLNEGINTS|。这些常量表示解释器启动期间预先分配的小正整数和负整数的数量。这些整数的范围从 -5 到 256,是 Python 程序的主力,经常使用并且针对性能进行了高度优化。

为什么这些价值观很重要?


您可能想知道为什么有这些特定值。这些整数是 Python 程序中最常用的整数。通过为它们预先分配内存,Python 优化了内存使用并增强了性能,确保经常使用的整数值可以立即可用。

结论


当我们结束 Python 内部工作原理的旅程时,我们发现了它的一些最有趣的秘密。从可变性和不变性的动态舞蹈到 |NSMALLPOSINTS| 背后的巧妙优化 和 |NSMALLNEGINTS|,Python 以其优雅和高效让我们眼花缭乱并给予我们启发。

因此,下次编写 Python 代码时,请记住表面之下的魔力 — 内存中对象的复杂舞蹈、可变性和不变性的仔细平衡,以及使 Python 成为强大工具的巧妙优化。

标签:print,可变性,内存
来源:

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有