作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢!

语言的内存管理是语言设计的一个重要方面。它是决定语言性能的重要因素。无论是C语言的手工管理,还是Java的垃圾回收,都成为语言最重要的特征。这里以Python语言为例子,说明一门动态类型的、面向对象的语言的内存管理方式。

对象的内存使用

赋值语句是语言最常见的功能了。但即使是最简单的赋值语句,也可以很有内涵。Python的赋值语句就很值得研究。

a = 1

整数1为一个对象。而a是一个引用。利用赋值语句,引用a指向对象1。Python是动态类型的语言(参考动态类型),对象与引用分离。Python像使用“筷子”那样,通过引用来接触和翻动真正的食物——对象。

引用和对象

为了探索对象在内存的存储,我们可以求助于Python的内置函数id()。它用于返回对象的身份(identity)。其实,这里所谓的身份,就是该对象的内存地址。

a = 1print(id(a))
print(hex(id(a)))

在我的计算机上,它们返回的是:

11246696
‘0xab9c68’

分别为内存地址的十进制和十六进制表示。

在Python中,整数和短小的字符,Python都会缓存这些对象,以便重复使用。当我们创建多个等于1的引用时,实际上是让所有这些引用指向同一个对象。

a = 1
b = 1print(id(a))
print(id(b))

上面程序返回

11246696

11246696

可见a和b实际上是指向同一个对象的两个引用。

为了检验两个引用指向同一个对象,我们可以用is关键字。is用于判断两个引用所指的对象是否相同。

[](javascript:void(0)

Python深入-Python的内存管理相关推荐

  1. python释放变量内存_2020Python面试题:Python是如何进行内存管理的?

    Python面试,Python面试题 一.垃圾回收: Python不像C++,Java等语言一样,他们可以不用事先声明变量类型而直接对变量进行赋值.对Python语言来讲,对象的类型和内存都是在运行时 ...

  2. python是如何进行内存管理的

    Python引入了一个机制:引用计数. python内部使用引用计数,来保持追踪内存中的对象,Python内部记录了对象有多少个引用,即引用计数,当对象被创建时就创建了一个引用计数,当对象不再需要时, ...

  3. Python是如何进行内存管理的?

    Python引用了一个内存池(memory pool)机制,即Pymalloc机制(malloc:n.分配内存),用于管理对小块内存的申请和释放 内存池(memory pool)的概念: 当 创建大量 ...

  4. Python源码阅读-内存管理机制(一)

    Python的内存管理架构 基本分层 在Objects/obmalloc.c源码中, 给了一个分层划分 _____ ______ ______ ________[ int ] [ dict ] [ l ...

  5. python基于值的内存管理模式_为什么说python采用的是基于值的内存管理模式

    匿名用户 1级 2018-05-20 回答 先从较浅的层面来说,Python的内存管理机制可以从三个方面来讲 (1)垃圾回收 (2)引用计数 (3)内存池机制 一.垃圾回收: python不像C++, ...

  6. python面试题之Python是如何进行内存管理的

    python内部使用引用计数,来保持追踪内存中的对象,Python内部记录了对象有多少个引用,即引用计数,当对象被创建时就创建了一个引用计数,当对象不再需要时,这个对象的引用计数为0时,它被垃圾回收. ...

  7. Python基于值的内存管理真相

    Python采用基于值的内存管理方式,如果为不同变量赋值为相同值,这个值在内存中只保存一份,多个变量指向同一个值的内存空间首地址,这样可以减少内存空间的占用,提高内存利用率. Python启动时,会对 ...

  8. python基于值的内存管理方式_python内存管理方式以及深拷贝,浅拷贝

    简单开篇,手绘结尾 1.pip常用工具命令: $pip download packagename==version #下载指定版本模块,但是不安装 $pip freeze>requirement ...

  9. python 如何进行内存管理,python面试题之Python是如何进行内存管理的

    python内部使用引用计数,来保持追踪内存中的对象,Python内部记录了对象有多少个引用,即引用计数,当对象被创建时就创建了一个引用计数,当对象不再需要时,这个对象的引用计数为0时,它被垃圾回收. ...

  10. Python源码阅读-内存管理机制(二)

    arena arena: 多个pool聚合的结果 arena size pool的大小默认值位4KB arena的大小默认值256KB, 能放置 256/4=64 个pool obmalloc.c中代 ...

最新文章

  1. Kafka消费者重置offset读取数据
  2. 购物车完善版,客户余额及所购商品保存在文件
  3. PyCharm喜好设置
  4. bootstrapValidator remote 验证问题
  5. Nvidia Jetson TX2+Intel Realsense D435i跑ORB_SLAM3
  6. 开源流媒体云视频平台EasyDarwin中EasyCMS服务是如何进行命令转发和消息路由的
  7. windows server 2008 - 隐藏磁盘分区 (2)
  8. System V 共享内存 和 系列函数
  9. JavaScript中对象的比较
  10. 微型计算机中央处理器又称为,微处理器又称为什么
  11. 【前端学习】ES6语法 函数写法优化
  12. 生活污水是怎么处理的
  13. adobe acrobat xi pro绿色免安装版
  14. Codeforces Round #548 C. Edgy Trees
  15. 1001: 植树问题 ZZULIOJ
  16. 使用有道词典API做一个简单的翻译页面 HTML+JS+有道词典API(代码可直接运行)
  17. Android Studio从gthub上导入新项目的时候,R文件丢失的问题
  18. 关于gif进度条的问题
  19. 【HTML CSS】笔记初日 HTML基础
  20. 根据近邻列表法识别团簇—冷凝成核 Matlab+Ovito(上)

热门文章

  1. oracle配置ipv6_pl/sql developer通过IPV6连接oracle-阿里云开发者社区
  2. 计算机技术中硬件系统的功能,对计算机技术中的十个重要关系的剖析
  3. threejs 物体根据相机位置显示_认识Threejs
  4. java数组的用法_Java数组的使用
  5. Java的正则表达式
  6. deeplabv2实现并训练自己的数据
  7. android中多态的应用_动态代理原理及在 Android 中的应用
  8. Java快速入门学习笔记2 | Java语言中的基本类型
  9. java windows编程,以编程方式控制Windows媒体播放器,最好是从Java
  10. java 数组构造_java – 从数组构造(非二进制)树