4

Python对象的引用计数 | CHEGVA

 1 year ago
source link: https://chegva.com/5287.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Python进阶(12)—对象的引用计数

◎知识点

  1. Python对象引用计数概念及使用示例

◎脚本练习

"""对象的引用计数"""

"""
1、什么是对象的引用计数?
    通常情况下,开发人员无需关心内存的分配和释放。当创建一个对象时,系统会自动分配一块内存
    以存储该对象的信息。当该对象不再被使用时,系统会进行垃圾回收以自动释放掉其占用的内存
    为了确保使用中的对象不会被销毁,python使用引用计数来跟踪和计算内存中每个对象被引用的次数。
    当对象的引用计数为0时,它才可以被销毁
"""

"""
2、对象的引用计数加1的情形
    (1) 对象赋值给变量
    (2) 引用对象的变量赋值给另一个变量
    (3) 对象作为容器(例如:列表、元组、集合等)中的元素
    (4) 对象作为函数调用时的实参
"""

class MyClass(object):
    pass

def do_sth(param):
    pass

# 引用计数加1,变为1
a = MyClass()

# 引用计数加1,变为2
b = a

# 引用计数加1,变为3
L = [1, 2, a]

# 在函数的执行过程中,引用计数加1,变为4
do_sth(a)
# 当函数执行后,对实参的引用会自动销毁,因此,引用计数减1,变为3

import sys

# 在函数的执行过程中,引用计数加1,变为4
print(sys.getrefcount(a))   # 4
# 当函数执行后,对实参的引用会自动销毁,因此,引用计数减1,变为3
Python

▽ 对象的引用计数1

Python进阶(12)—对象的引用计数
"""
3、对象的引用计数减1的情形
    (1) 对象离开它的作用域,例如:对象所在的函数执行完毕
    (2) 对象的引用被显式销毁
    (3) 引用对象的变量被赋予新的对象
    (4) 从容器中删除对象,或对象所在的容器被销毁
"""

# 引用计数加1,变为1
x = MyClass()

# 引用计数加1,变为2
y = x

# 引用计数减1,变为1
del x

# 引用计数加1,变为2
z = y

# 引用计数减1,变为1
y = 18

# 引用计数加1,变为2
l = [1, 2, z]

# 引用计数减1,变为1
del l

# 在函数的执行过程中,引用计数加1,变为2
print(sys.getrefcount(z))   # 2
# 当函数执行后,对实参的引用会自动销毁,因此,引用计数减1,变为1
Python

▽ 对象的引用计数2

Python进阶(12)—对象的引用计数

◎脚本地址:https://github.com/anzhihe/learning/blob/master/python/practise/learn-python/python_advanced/reference_count.py

安志合个人博客,版权所有 丨 如未注明,均为原创 丨 转载请注明转自:https://chegva.com/5287.html | ☆★★每天进步一点点,加油!★★☆ | 

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK