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
  • 相关阅读:
    SQL Server 幻读 的真实案例
    CSS hack 360浏览器 极速模式与兼容模式
    CS程序中XML编码Encode和解码Decode
    webbrowser 响应关闭事件
    asp.net Checkbox 绑定自定义属性
    企业库实现AOP的几种方法
    c# 自定义log4net过滤器
    SQL Server 并发死锁解决案例备忘
    c# 复制文件夹
    访问 iframe 内部控件方法
  • 原文地址:https://www.cnblogs.com/Hades123/p/10813208.html
Copyright © 2011-2022 走看看