python-----内存管理机制
一、深浅拷贝的区别
深浅拷贝一般是在列表嵌套列表的情况下去讨论
浅拷贝:只拷贝列表中对象的引用,嵌套列表中的数据是不会进行全部拷贝的
深拷贝:会把对象里面所有的数据都拷贝一份,不再只拷贝对象的引用,会另开内存存储
# 浅拷贝: 只拷贝列表中对象的引用,a的值发生变化后会影响到f
a = [11,22,33]
b = [1,2,3,a] # b里面调用a
f = b.copy() # copy方法是浅拷贝
a.append("新值a")
print("f的值", f) # 结果: [1, 2, 3, [11, 22, 33, '新值a']]
# 从结果可以看到,修改了a的之后,d的值也会发生变化 # 深拷贝会把对象里面所有的数据都拷贝一份,另开一个内存存储,所以修改原来的对象拷贝出来的不受影响
import copy
a = [11,22,33]
b = [1,2,3,a]
# 需要调用copy中的deepcopy函数
f = copy.deepcopy(b)
a.append("新值a")
print("f的值", f) # 结果:[1, 2, 3, [11, 22, 33]]
# 从结果可以看到,修改了a的值并没有影响到f的值
二、小整数池
python中的整数池也是为了节约内存而设计的, 避免为整数频繁申请和销毁内存空间
小整数池范围:-5到256
>>> a = -5
>>> b = -5
>>> id(a)
140732735804256
>>> id(b)
140732735804256
>>> a = -6
>>> b = -6
>>> id(a)
3147946898928
>>> id(b)
3147918100496
>>> a = 256
>>> b = 256
>>> id(a)
140732735812608
>>> id(b)
140732735812608
>>> a = 257
>>> b = 257
>>> id(a)
3147918100496
>>> id(b)
3147918100368
上述代码可以看到,-5到256之间的数字,打印的内存地址都是一样的,注意不要直接在pycharm运行,因为pycharm会做优化,导致打印的内存地址是一样的,需要在python命令行中运行
三、大整数池
开始是空的,如果第一次定义一个字符串只有数字,字母,下划线三个元素组成,python会把这个值存储到大整数池,下次调用就会去这个大整数池调用
a = 'a_bc11'
c = 'a_bc11'
d = 'a_ !bc11'
print(id(a)) # 结果:2156715830048
print(id(c)) # 结果:2156715830048
print(id(d)) # 结果:2156713793048
从结果可以看到a,c两个内存地址是一样的,因为都是调用大整数池,d里面因为存在其他特殊字符,导致a,c内存地址不一样
python-----内存管理机制的更多相关文章
- Python内存管理机制及优化简析(转载)
from:http://kkpattern.github.io/2015/06/20/python-memory-optimization-zh.html 准备工作 为了方便解释Python的内存管理 ...
- 【python测试开发栈】—python内存管理机制(二)—垃圾回收
在上一篇文章中(python 内存管理机制-引用计数)中,我们介绍了python内存管理机制中的引用计数,python正是通过它来有效的管理内存.今天来介绍python的垃圾回收,其主要策略是引用计数 ...
- Python内存管理机制-《源码解析》
Python内存管理机制 Python 内存管理分层架构 /* An object allocator for Python. Here is an introduction to the layer ...
- 解读Python内存管理机制
转自:http://developer.51cto.com/art/201007/213585.htm 内存管理,对于Python这样的动态语言,是至关重要的一部分,它在很大程度上甚至决定了Pytho ...
- 了解Python内存管理机制,让你的程序飞起来
引用: 语言的内存管理是语言设计的一个重要方面.它是决定语言性能的重要因素.无论是C语言的手工管理,还是Java的垃圾回收,都成为语言最重要的特征.这里以Python语言为例子,说明一门动态类型的.面 ...
- 【python测试开发栈】python内存管理机制(一)—引用计数
什么是内存 在开始进入正题之前,我们先来回忆下,计算机基础原理的知识,为什么需要内存.我们都知道计算机的CPU相当于人类的大脑,其运算速度非常的快,而我们平时写的数据,比如:文档.代码等都是存储在磁盘 ...
- Python深入之python内存管理机制(重点)
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:醍醐三叶 关于python的存储问题, (1)由于python中 ...
- (重点)Python深入之Python内存管理机制你会吗?
前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:醍醐三叶 请注意:如果你平时学Python遇到问题找不到人解答?或者没有 ...
- python内存管理机制
主要分为三部分: (1)内存池机制(2)引用计数(3)垃圾回收 (1)内存池机制对于python来说,对象的类型和内存都是在运行时确定的,所以python对象都是动态类型简单来说,python内存分为 ...
- Python 源码剖析(六)【内存管理机制】
六.内存管理机制 1.内存管理架构 2.小块空间的内存池 3.循环引用的垃圾收集 4.python中的垃圾收集 1.内存管理架构 Python内存管理机制有两套实现,由编译符号PYMALLOC_DEB ...
随机推荐
- akka-typed(6) - cluster:group router, cluster-load-balancing
先谈谈akka-typed的router actor.route 分pool router, group router两类.我们先看看pool-router的使用示范: val pool = Rout ...
- CODING DevOps 系列第三课:云计算、云原生模式下 DevOps 的建设
本文首先会和大家分享当前整个应用生命周期的演变历程,然后讲解云计算模式下 DevOps 建设包含的过程.流程规范和标准,最后讲解云原生时代到来会带来哪些改变,以及标准化的建设会有哪些改变和突破. 应用 ...
- mapper.xml文件映射配置
一.导入约束 为全局配置文件绑定dtd约束: 1)联网会自动绑定 2)没网的时候[/org/apache/ibatis/builder/xml/mybatis-3-mapper.dtd]:解压myba ...
- excel如何快速汇总多个类别的总和?
这个需求是一位在当前抗疫一线的朋友提出的,和各位分享一下. 需求情况 因为众所周知的原因,他每天都需要为照顾的小区居民购买.运送生活物资.小区居民通过表单的形式提交自己每日的需求,最终汇总到一张exc ...
- Selenium自动化测试与练习
Selenium WebDriver 提供了web自动化各种语言(java python ruby等等) 调用接口库 提供 各种浏览器的驱动(web driver) 来驱动浏览器的 特点 测试程度可以 ...
- class 类组件:
ES6 中的class 类组件: // class 关键字:确定一个类型student以类的概念存在 class student{ //构造函数 是默认自动执行 // 初始化 name age 属性 ...
- 一文读懂:GBDT梯度提升
先缕一缕几个关系: GBDT是gradient-boost decision tree GBDT的核心就是gradient boost,我们搞清楚什么是gradient boost就可以了 GBDT是 ...
- 黎活明8天快速掌握android视频教程--22_访问通信录中的联系人和添加联系人
Android系统中联系人的通讯录的contentProvide是一个单独的apk,显示在界面的contact也是一个独立的apk,联系人apk通过contentProvide访问底层的数据库. 现在 ...
- Hibenate面试
5. 对比总结 返回值: get()返回的是查询出来的实体对象,而load()查询出来的是一个目标实体的代理对象. 查询时机: get()在调用的时候就立即发出SQL语句查询,而load()在访问非I ...
- .net core 使用 swagger 生成接口文档
微软参考文档:https://docs.microsoft.com/en-us/aspnet/core/tutorials/web-api-help-pages-using-swagger?tabs= ...