news 2026/10/2 13:55:22

Python变量与内存管理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python变量与内存管理

变量与内存管理

把与C语言中的变量做一个对比, 可以更好地去了解理解那个变量。

变量

变量在C语言中

全局变量, 指的是那些被放置在内存的静态变量区域里面的数据。

所谓的局部变量, 它是在代码块中作为存放在内存里的代码区的一部分而存在的, 当这个局部变量被调用的是, 它就存放在栈里面, 是那个叫作内核区的内存栈的部分。

1而Python的变量存储,则是使用类似堆的方式管理内存,由Python内部机制统一分配回收内存。

其中的那些变量, 还有关于变量的存储问题, 以及引用和对象之间的关系。

咱们作为面向对象这个编程语言领域的从业者, 过去一直特别相信一个说法, 觉得整个世界上的东西全都是对象。

人们可以把对象理解成一个个体, 这个个体是在经过了非常多轮的抽象处理之后, 把那些具备相同特点的物体类别给具体化、实例化了才形成的产物, 打个比方说来就是, 我们每一个人其实就是作为人类这个大类里的一个具体的对象代表存在的。

1classA():

2name ="123"

3def__init__(self):

4pass

5

6deffuna(self):

7pass

8deffuna():

9pass

10

11if__name__=="__main__":

12Fun =funa

13Variable = 1

14ClassA =A()

15ListA = [1,2,3]

16DictA = {'d':1,'e':2}

17TupleA = (1,2,3)

18Str ="python"

19print(type(Fun))

20print(type(Variable))

21print(type(ClassA))

22print(type(ListA))

23print(type(DictA))

24print(type(TupleA))

25print(type(Str))

输出的是:

class ‘’

class ‘int’

class ‘main.A’

class ‘list’

class ‘dict’

class ‘tuple’

class ‘str’

显然, 在中, 无论是基本的类型, 还是类、函数, 所有的事物全都被视作对象, 并放置在内存里面去进行存储, 此外也能够把它们简单地当作数值来看待。

其中这个变量它作为了一种引用形式, 去读取了对象内部所存储的那些信息, 这和C语言那种面向过程的方式有着明显的差异所在;在这里面的观点当中来说, 就是把这个变量视为对那个对象的指代关系,若用更为通俗直白的表述方式来阐释的话, 就是指它就是一个指向于对应数值的那个名字称谓。

所以的变量只是不过对于一块指定内存的引用, 也即对对象的引用, 或者称为指向值的名称, 相对于全局变量, 局部变量的赋值只是引用另一块内存。

在C语言里面, 一个变量代表一块特定的内存, 而不像某些其他编程语言, 能够看成数据已经存放在内存之中了, 被的变量对内存进行引用。即使变量不存在了, 内存里值也不会受到任何影响。

1if__name__=="__main__":

2

3a = 1

4b = 2

5print(id(a))

6print(id(b))

7

8a =b

9print(id(a))

10print(id(1))

11print(id(2))

12

13sys.exit(0)

输出的是:

咱们从输出结果上能够很明显地看出来, 同一块内存数据, 其实是能够被多个变量来引用的。而且呢, 常量和那个变量的内存地址, 是具有对应关系的。

1deffuna():

2a = 1

3print(id(a))

4

5if__name__=="__main__":

6

7a = 1

8funa()

9print(id(a))

10a = 2

11print(id(a))

12funa()

13

14sys.exit(0)

输出结果是:

一旦函数调用的过程执行完毕, 如果该类实例仍然处于被引用的状态, 那么该类型实例就会继续存在, 这种情况就类似于C++语言中的new操作符, 当对某个对象执行删除操作的时候, 也不会影响到那些对象依然还在被外部变量所指代的值。

当我们把这个给删除掉以后, 接着再那个输入print(id)这个代码的时候呢, 屏幕上面会出现下面这一段错误的提示内容。

1Traceback (most recent call last):

2File"C:/Users/Administrator/PycharmProjects/pysidetest/demo.py", line 69,in

3print(id(classA))

4NameError: name'classA'isnotdefined

如果仍有问题尚未获得解决的情形出现, 应当通过搜索交流群这一途径进行操作, 且在进入群聊之后, 需要执行下载资料工具以及安装包等相关动作。针对以上内容呈现给各位的最终总结性说明是, 感谢大家的观看!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/2 13:54:39

CANoe Panel可视化面板实战:从信号绑定到CAPL联动

做车载总线开发的朋友,几乎都绕不开 Vector CANoe。客气点说它是一套强大的总线开发测试工具,不客气地说,第一次打开它的人,光看那一堆窗口就能被劝退一半。今天这篇我想专门讲讲 CANoe 里一个不起眼、但实际项目里特别好用的功能…

作者头像 李华
网站建设 2026/10/2 13:52:20

CCF CSP历年真题C++解答:刷题方法、套路与避坑指南

简介:面向CCF CSP认证考生的C版历年真题解答合集,基于历年真实赛题整理,帮助备赛者通过源码研读掌握算法设计与编程实现,适合自学与系统训练。解答按年份与题号命名cpp文件,内容覆盖基础语法、数组/链表/栈/队列/树/图…

作者头像 李华
网站建设 2026/10/2 13:52:20

Nacos 集群 `9849` 偶发超时:一次容器线程数异常的排查记录

环境:3 节点 Nacos 集群,Docker Compose 部署,network_mode: host,外部 MySQL。集群 3.1.1 ,节点间偶发 gRPC 超时,曾伴随服务调用失败和健康节点列表抖动。本文记录当时的证据、排查过程及处理结果。 现象…

作者头像 李华
网站建设 2026/10/2 13:51:51

小白程序员必看!大模型学习指南:从单智能体到多智能体协作

工业AI正从单智能体走向多智能体协作,本文深入分析了单智能体的局限性,包括专业深度不够、上下文容量有限、并行效率太低、可靠性与隔离性差等,并介绍了多智能体协同架构的三种模式:层级式、网状式、混合式,以及任务拆…

作者头像 李华