Python内存解析浅学

时间:2023-03-09 18:37:14
Python内存解析浅学

1.内存管理

首先理解变量,和内存特性

  1. 1.       Python中无须声明变量,
  2. 2.       无须指定类型
  3. 3.       不用关心内存管理
  4. 4.       变量名会被回收
  5. 5.       Del 语句能够释放资源

内存分配

如定义:

X=1    默认已经是int型,那他在内存中是怎样的

1.引用计数器

Python内存解析浅学

X,y引用的是同一个对象,都为1,当对象被赋值给其他变量,引用计数器就变为了2

有4种方式,会增加引用计数器

  1. 1.       创建对象

X=1

  1. 2.       别名被创建

如:赋值 y=x

  1. 3.       做为参数传递给函数

参数名(x)

4.成为容器对象的一个元素

List=[x,y,’ss’]

2.减少引用

还是以上的例子:

X=1

Y=x

X=2

当对象1被创建并赋值给X,它的引用就为1,当增加了别名(应该也可以成为赋值),引用就变成了2(Y的引用就为2),不过当x被重新赋值2,x对应的引用计数就减1.

Python内存解析浅学

什么情况下会减少引用

  1. 1.       本地引用被赋值为其他对象,如x=2
  2. 2.       对象名被销毁

使用del x ,这是引用计数就为0了

  1. 3.       对象从一个窗口对象移除

函数名.Remove()

4.窗口对象被销毁

如刚举例的:List=[x,y,’ss’]

Del  list

学习增加引用,和减少引用主要还是要了解他的垃圾回收

3.垃圾的回收

当引用计数器变为0时,它就被垃圾回收,这个是我比较浅淡的理解,

而他回收的过程书中描述有2种:以下文字描述提炼来自《Python核心编程》

1.它会去检查那些引用计数为0的对象,然后清除其在内存的空间。当然除了引用计数为0的会被清除,还有一种情况也会被垃圾收集器清掉:当两个对象相互引用时,他们本身其他的引用已经为0了。

2、垃圾回收机制还有一个循环垃圾回收器, 确保释放循环引用对象(a引用b, b引用a, 导致其引用计数永远不为0。

>> x = []

>>> y = []

>>> a.append(y)

>>> b.append(x)

>>> print a

[[[...]]]

>>> print b

[[...]]