zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    zoj 3279 线段树 OR 树状数组
    fzu 1962 树状数组 OR 线段树
    hdu 5057 块状链表
    hdu3487 Play with Chain
    bzoj 1588营业额统计(HNOI 2002)
    poj2823 Sliding Window
    poj2828 Buy Tickets
    poj2395 Out of Hay
    poj3667 Hotel
    poj1703 Lost Cows
  • 原文地址:https://www.cnblogs.com/Hades123/p/10813208.html
Copyright © 2011-2022 走看看