美文网首页
Python 内存管理之 ->引用计数

Python 内存管理之 ->引用计数

作者: 酷酷的图图 | 来源:发表于2018-06-25 17:29 被阅读0次

人生苦短 我用python

开始愉快的享(代)受(码)时间:


内容参考:

引用计数增加的情况:

  • 对象被创建:

如果对象被创建后没有引用操作,此时的引用计数是0,MyName()本身不是一个引用。

MyName()

class MyName(object):
pass

print(sys.getrefcount(MyName()))
结果:1
说明:之所以结果为1,是因为sys.getrefcount(MyName())函数也算一个引用。
  • 对象被引用

说明:这里 23345455 这个对象并没有在内存中新建,因为在Python启动解释器的时候会创建一个小整数池 这些对象会被自动创建加载到内存中等待调用

以下代码,赋值操作为数据增加了3个引用,sys.getrefcount(b)也增加了一个引用

那为什么sys.getrefcount(c)的结果还是4呢?这是因为当函数执行后,作为参数的引用会自动销毁,所以print(sys.getrefcount(b))在执行完毕后引用就删除了

# 增加了一个引用
a = 23345455
# 增加了一个引用
b = a
# 增加了一个引用
c = b
# 增加了一个引用
print(sys.getrefcount(b))  # 执行完毕后引用销毁,减少一个引用
# 增加了一个引用
print(sys.getrefcount(c))  
结果:4,4
注意:每一次赋值都会增加数据操作的引用次数,要记住引用的是变量a,b,c等指向的数据23345455,而不是变量本身。
  • 对象被作为参数,传入到一个函数中
print(sys.getrefcount(b))  # 执行完毕后引用销毁,减少一个引用
  • 对象作为一个元素,存储在容器中
# 增加了一个引用
a = 23345455
# 增加了一个引用
b = a
list = [a, b]  # 增加了2个引用
print(sys.getrefcount(b)
结果:5

引用计数减少的情况:

  • 对象的别名被赋予新的对象
a = 23345455  # 增加了一个引用
b = a  # 增加了一个引用
print(sys.getrefcount(a))
b = 1.4  # 减少了一个23345455整数的引用
print(sys.getrefcount(a))
结果:3;2
  • 对象别名被显示销毁

说明:直接使用del关键字或者del()函数;注意:下述代码手动销毁的是被赋值引用的a,但是在列表里的a不会被销毁

a = 23345455  # 增加了一个引用
b = a  # 增加了一个引用
list = [a, b]  # 增加了2个引用
del a
print(sys.getrefcount(b))
结果:4
  • 一个对象离开它的作用域

说明:a作为参数传递到sys.getrefcount(a)函数中,只在函数中起作用,一旦执行完毕就会销毁

a = 23345455  # 增加了一个引用
b = a  # 增加了一个引用
print(sys.getrefcount(a))  # 执行完毕后引用销毁
print(sys.getrefcount(a))
结果:3;3
  • 对象所在的容器被销毁,或从容器中删除对象
# 增加了一个引用
a = 23345455
# 增加了一个引用
b = a
list = [a, b]  # 增加了2个引用
del list
print(sys.getrefcount(b))
结果:3

相关文章

  • python爬虫面试题

    python是如何进行内存管理的? a、对象的引用计数机制 python内部使用引用计数,来保持追踪内存中的对象,...

  • python学习一

    1 python 如何管理内存 对象引用计数机制,垃圾回收机制,内存池机制 一。对象引用机制 python内部引用...

  • 深入理解Python GC

    对象内存管理 python中对于对象内存管理有两种方法,引用计数/GC 。 引用计数策略应用到每个对象的管理中,接...

  • Python Memory Management

    Python的内存管理机制可以从三个方面来讲: 引用计数 垃圾回收 内存池机制 引用计数 Python采用了类似W...

  • InterV For Python

    0x01 Python是如何进行内存管理的 引用计数Python使用引用计数来保持追踪内存中的对象,所有对象都有...

  • python内存管理机制

    Python内存管理机制主要包括以下三个方面: 引用计数机制 垃圾回收机制 内存池机制 引用计数 举个例子说明引用...

  • Obj-C高级编程--内存管理

    自动引用计数 自动引用计数:指内存管理中对引用采取自动计数的技术。 内存管理/引用计数 持有对象引起引用计数加...

  • python内存管理机制

    Python内存管理机制 Python内存管理机制主要包括以下三个方面: 引用计数机制 垃圾回收机制 内存池机制 ...

  • 内存管理与自动引用计数—第一日

    自动引用计数 1.1 什么是自动引用计数 内存管理中对引用采用自动计数的计数 1.2 内存管理/引用计数 这一张举...

  • iOS内存管理1:引用计数

    iOS内存管理1:引用计数 引用计数: Objecttive-C使用引用计数来进行内存管理。然后,引用计数其实是不...

网友评论

      本文标题:Python 内存管理之 ->引用计数

      本文链接:https://www.haomeiwen.com/subject/qigyyftx.html