• Python内存管理


    1 内存管理

    1.1 变量储存

    当我们定义一个变量x = 17时,此时计算机会在内存中开辟一个空间进行存放17这个变量值,而x则相当于一个标识,在17这个内存空间上络印上x,这样我们就可以通过x找到17这个变量值。

    1.2 Python垃圾回收机制

    当变量值的引用计数值为0时,为了增加内存的使用率,Python会删除这个值,释放内存空间,如:

    x = 'hades'   # 'hades'的引用计数+1
    
    y = x    # 'hades'的引用计数再+1,此时'hades'的引用计数为2
    
    print(id(y))
    
    print(id(x))
    
    del x, y   
    
    # 删除 x,y 这个标识,此时'hades'的引用计数-2,'hades'的引用计数为0,此时Python就会将'hades'删除,释放内存
    
    print(id(x), id(y))
    
    2042495349680
    2042495349680
    
    
    
    ---------------------------------------------------------------------------
    
    NameError                                 Traceback (most recent call last)
    
    <ipython-input-6-c9cba293262b> in <module>
         10 
         11 
    ---> 12 print(id(x),id(y))
    
    
    NameError: name 'x' is not defined
    

    1.3 引用计数

    引用计数是计算机编程语言的一种内存管理技术,指内存中变量值所拥有‘标识’的个数,当这个‘标识’数为0时就会删除变量值,释放变量值占据的内存空间

    1.4 小整数池

    对于上一节讲的引用计数,需要注意的是:Python实现int的时候有个小整数池。为了避免因创建相同的值而重复申请内存空间所带来的效率问题, Python解释器会在启动时创建出小整数池,范围是[-5,256],该范围内的小整数对象是全局解释器范围内被重复使用,永远不会被回收。

    x = 19
    y = 19
    z = 20
    
    print(id(x))
    print(id(y))
    print(id(z))
    
    1499099168
    1499099168
    1499099200
  • 相关阅读:
    CSS相关(2)
    CSS相关(1)
    Git(待补充)
    Jenkins学习(1)-什么是Jenkins
    Yaml(待补充)
    Tomcat(待补充)
    Json(待补充)
    Java语言学习(8)-Java中的异常处理
    Java语言学习(7)-Java中IO
    Java语言学习(6)-Java中封装类(正则表达式操作类)
  • 原文地址:https://www.cnblogs.com/Hades123/p/10813208.html
Copyright © 2020-2023  润新知