python内存相关问题
想要弄清楚内存相关的问题,就要理清楚:变量、内存地址、值之间的关系:
1.程序里什么时候分配新的内存地址?
答:1.定义一个变量,内存就开辟一个内存空间,分配一个内存地址.
特殊:
如:a=687
a=197
print(a)# 输出197
这是2内存个地址,输出a,是输出第二a的个值,a指向值为197的内存地址,第一个a的值687 还存在,但是a不指向它了, 2.一个列表里的变量存放的是啥?
答:放的是变量的内存地址 3.变量的类型可以是哪些?
答:整数,字符串,列表,字典,元组,所有数据类型 4.判断操作是 赋值 还是 修改变量的值?
答:4.1 如果是赋值则:开辟新的内存空间,分配新的内存地址(python小数据池除外) 请体会如下3种赋值的不同 第一种:开辟了新的内存空间

第二种:赋值是把v1的内存地址给v2

第三种:(记)python小数据池中只要数值相同,内存地址就相同,这是python的缓存机制

4.2 如果是修改变量本身的值:
5.python的小数据池对内存地址的影响?
答:数据范围以内的数[-5,256],只要数值相同,内存地址就相同 补充:
# 按理 v1 和 v2 应该是不同的内存地址。特殊:
1. 整型: -5 ~ 256
2. 字符串:"alex",'asfasd asdf asdf d_asdf ' ----"f_*" * 3 - 重新开辟内存 6.python变量数值垃圾回收机制
如 a=30
a=20
a被赋了新值 20 ,之前的值 30 会被解释器垃圾回收机制自动 回收
################################## 分隔符 #####################################
变量是为了写代码方便理解,其实是变量指向一个值的内存地址, 重新赋值,原来的值没有改,还在内存中,只是没有变量,指向它的内存地址了, 一个值对应一个内存地址,两个一样的值也是2个地址(python小数据池除外)
1.不可修改的数据类型,string...等、或其他 内置函数 操作后 ,产生新的值, 旧值没有改变,新值没有变量指向
################################## 分隔符 ##################################### '''
23. v1 = '人生苦短,我用Python' # v1 是一个变量,指向'人生苦短,我用Python'的内存地址
v2 = [1,2,3,4,v1] #注 这里的v1,放的是v1的内存地址,
v1 = "人生苦短,用毛线Python"
print(v2) # 输出 [1, 2, 3, 4, '人生苦短,我用Python'] 解释:v1 = "人生苦短,用毛线Python" 是对v1 赋值,在内存中开辟了一个新的内存空间,即第一个v1 和 第二个 v1 的内存地址不一样,
而 v2中元素v1存放的是第一个v1的内存地址所对应的值。
'''
'''
24. 看代码写结果并解释原因
data_list = []
data = {}
for item in range(10):
data['user'] = i
data_list.append(data)
print(data_list) 输出:[{'user':9},{'user':9},{'user':9},{'user':9},...] 一共9个
解释:data是指向一个内存地址,append是把data添加到空列表data_list,
data_list = [data,data,data,data,data,data,data,data,data,data]
data指向一个内存地址,内存地址的下的值被修改,所以最后data={'user':9}
data_list=[{'user':9},{'user':9},{'user':9},{'user':9},...] 一共9个
''' '''
25. 看代码写结果并解释原因
data_list = []
for item in range(10):
data = {}
data['user'] = i
data_list.append(data)
print(data_list) 输出: [{'user':0},{'user':1},{'user':2},{'user':3},{'user':4},{'user':5},,{'user':6},{'user':7},{'user':8},{'user':9}]
每次循环经过data = {} ,都添加加一个新的字典变量,开辟一个新的内存地址,再对字典添加键值对,最后追加到列表data_list中
对比
第一种

第二种
python内存相关问题的更多相关文章
- Python内存相关
Python内存相关 示例一: v1 = [1, 2, 3] v2 = [1, 2 ,3] v1 = 123 v2 = 123 v1 = "dogfa" v2 = "do ...
- python内存相关以及深浅拷贝讲解
3.9 内存相关 3.9.1 id,查看内存地址 >>> v1 = [11,22,33] >>> v2 = [11,22,33] >>> prin ...
- python 内存问题(glibc库的malloc相关)
题记: 这是工作以来困扰我最久的问题.python 进程内存占用问题. 经过长时间断断续续的研究,终于有了一些结果. 项目(IM服务器)中是以C做底层驱动python代码,主要是用C完成 网络交互部分 ...
- Python内存优化
实际项目中,pythoner更加关注的是Python的性能问题,之前也写过一篇文章<Python性能优化>介绍Python性能优化的一些方法.而本文,关注的是Python的内存优化,一般说 ...
- Python内存优化:Profile,slots,compact dict
实际项目中,pythoner更加关注的是Python的性能问题,之前也写过一篇文章<Python性能优化>介绍Python性能优化的一些方法.而本文,关注的是Python的内存优化,一般说 ...
- python文件相关操作
Python文件相关操作 打开文件 打开文件,采用open方法,会将文件的句柄返回,如下: f = open('test_file.txt','r',encoding='utf-8') 在上面的代码中 ...
- 记一次调试python内存泄露的问题
转载:http://www.jianshu.com/p/2d06a1a01cc3 这两天由于公司需要, 自己编写了一个用于接收dicom文件(医学图像文件)的server. 经过各种coding-de ...
- Python内存分配器(如何产生一个对象的过程)
目录 内存分配器 Python分配器分层 第零层--通用的基础分配器 第一层--低级内存分配器 内存结构 arena pool new arena usable_arenas和unused_arena ...
- 【python测试开发栈】—python内存管理机制(二)—垃圾回收
在上一篇文章中(python 内存管理机制-引用计数)中,我们介绍了python内存管理机制中的引用计数,python正是通过它来有效的管理内存.今天来介绍python的垃圾回收,其主要策略是引用计数 ...
随机推荐
- 问题:oracle select into;结果:oracle SELECT INTO 和 INSERT INTO SELECT 两种表复制语句详解
oracle SELECT INTO 和 INSERT INTO SELECT 两种表复制语句详解 (2011-07-08 08:59:47) 转载▼ 标签: it 分类: oracle 我们经常会遇 ...
- 如何使用google等一系列搜索引擎?
对于我们经常使用的搜索引擎大家都都不陌生,但是,如何高效的利用呢?大家都知道空格是搜索多个关键词,那么有没有其他的快捷键呢?答案是肯定的,以下内容转自知乎 1.双引号 把搜索词放在双引号中,代表完全匹 ...
- Codeforces #505(div1+div2) B Weakened Common Divisor
题意:给你若干个数对,每个数对中可以选择一个个元素,问是否存在一种选择,使得这些数的GCD大于1? 思路:可以把每个数对的元素乘起来,然后求gcd,这样可以直接把所有元素中可能的GCD求出来,从小到大 ...
- unity3D中制作天空盒(Skyboxes)
1.首先制作图片,需要把图片用Ps制作成psd格式,制作6张 2.把6个psd文件导入工程目录 Assets下, 3.在project属性列表中选中Assets,单击鼠标右键选择 Create —&g ...
- jmeter CSV Data数据中带有逗号解决方法
今天用jmeter做性能测试,由于参数的数据中含有逗号,一直失败,尝试了几次终于成功,先写下经验 首先看设置 E:\apache-jmeter-2.12\bin\litaojunzb.csv文件格式如 ...
- 999F Cards and Joy
传送门 题目大意 有n个人n*m张牌,每个人分m张牌.每个人有一个自己喜欢的数值,如果他的牌中有x张数值等于这个值则他的高兴度为L[x],求怎样分配牌可以使得所有人的总高兴度最大. 分析 我们发现每一 ...
- python常用uuid模块
uuid.uuid4(),会根据我们当前的网卡和时间生成的一个随机字符串. 注意:uuid.uuid4()生成的是一个对象,需要强转为字符串. uid = str(uuid.uuid4()) #当前网 ...
- spring项目中监听器作用-ContextLoaderListener
附加链接:http://blog.csdn.net/zjw10wei321/article/details/40145241 作用:在启动Web 容器时,自动装配Spring applicationC ...
- 关于集合的小demo
/*1.分析以下需求,并用代码实现: (1)有如下代码: (2)定义方法统计集合中指定元素出现的次数,如"e" 3,"f" 2,"g" 4* ...
- 20169219《Linux内核原理与分析》第十一周作业
设备与模块 关于设备驱动和设备管理的四种内核成分: 设备类型:为了统一普通设备的操作所采用的分类. 模块:用于按需加载和卸载目标码的机制. 内核对象:内核数据结构中支持面向对象的简单操作,还支持维护对 ...
