day06 内存地址 小数据池缓存机制
1. 内存相关
示例一
v1=[11,22,33]
v2=[11,22,33]
#值相等 内存地址不等 v1=11
v2=11
#按理说内存地址应该不等,但是python为了优化使其内存地址相等 v1="dd"
v2="dd"
#按理说内存地址应该不等,但是python为了优化使其内存地址相等
示例二
v1=[11,22,33]
v1=[11,22]#第一个值将会等待被回收,另外再开辟内存地址
示例三
v1=[11,22,33]
v2=v1# v2指向v1指向的地址 #练习1
v1=[11,22,33]
v2=v1#v2指向v1指向的地址
v1.append(666)#在v1指向的内存地址中修改内容
print(v2)#v2还是指向v1指向的地址
#[11,22,33,666] #2
v1=[11,22,33]
v2=v1#v2指向v1指向的地址
v1=[1,2,3,4]#v1重新开辟一块内存空间
print(v2)#v2还是指向原来v1指向的地址 address([11,22,33])
#[11,22,33] #3.
v1="mari"
v2=v1#v2指向v1指向的地址
v1="old"
print(v2)
#mari
示例四
v=[1,2,3]
values=[11,2,v] #values[2]指向v指向的内存地址
#1.内部修改
v.append(9)
print(values)#[11,2,[1,2,3,9]] #2.内部修改
values[2].append(999)# values[2]==v 修改v内存地址的内容
print(v)#
[1,2,3,999] #3.赋值
values[2]=666
#将values[2]不再指向v 而是新赋值666 重新开辟内存空间 所以对v没有影响
print(v)
#[1,2,3]示例五
v1 = [1,2]
v2 = [2,3]
v3 = [11,22,v1,v2,v1]
示例6
#20.看代码写结果并解释原因 # info = [1,2,3]
# userinfo = [info,info,info,info,info]
#
# info[0] = '不仅多,还特么难呢'
# print(info,userinfo)
#['不仅多,还特么难呢', 2, 3] (列表修改后 自身改变 可变数据类型)
#[['不仅多,还特么难呢', 2, 3], ['不仅多,还特么难呢', 2, 3], ['不仅多,还特么难呢', 2, 3], ['不仅多,还特么难呢', 2, 3], ['不仅多,还特么难呢', 2, 3]]
#(userinfo指向info指向的地址,info只是修改了内存地址中的一个元素,并没有改变地址,info的地址中内容改变,userinfo的内容也会跟着内存地址中内容变化而变化) #24.看代码写结果并解释原因 # data_list = []
# data = {}
# for i in range(10):
# data['user'] = i
# data_list.append(data)
# print(data_list) #[{'user': 9}, {'user': 9}, {'user': 9}, {'user': 9}, {'user': 9}, {'user': 9}, {'user': 9}, {'user': 9}, {'user': 9}, {'user': 9}]
#data的内存地址中的值最后都被9覆盖
#data_list里面保存的是十个相同的data内存地址 #25.看代码写结果并解释原因 # data_list = []
# for i 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字典创建了10次-->10个不同的内存地址-->每创建一次地址就赋一个i值(i每次都会自加一次)然后将十个不同内存地址添加到列表data_list中
# 所以i不会被覆盖
#所以打印的就是10个内存地址中的值 #1.列表中存放的是很多个地址的,每个地址指向存放该元素的另一个内存地址
data=[1,2,3,4]
nums=[]
for i in data:
nums.append(i)#将data列表的地址存放到num列表中
print(id(data[0]),id(nums[0]))#所以每个列表中子元素的地址都相等,但是nums和data的地址不等
#地址相同 #2,
data=[1,2,3,4]
nums=[]
for i in data:
nums.append(str(i))#存放的是一个字符串,因为字符串得到的是一个新值
print(id(data[0]),id(nums[0]))
#地址不同 #3.
data=["a","b","c"]
nums=[]
for i in data:
nums.append(i)
print(id(data[0]),id(data[0]))
#相同 #4.
v1=[
[1,2,3],[2,3,4]
]
v2=[]
for item in v1:
v2.append(item)
print(id(v1),id(v2))#不同
print(id(v1[0]),id(v2[0]))#相同示例7:(字符串和集合运算)的修改后,不会影响原来的值 而是开辟新空间存储
v1="Gao"
v2=v1
v1.upper()#新开辟一块空间
print(v1,v2)
"Gao"
"Gao" v1={1,2,3}
v2=v1
v1.intersection({2,3})#生成新的集合 开辟新的空间 对原来的集合没没有影响
2.查看内存地址: id()
v1=[1,2,3]
v2=v1
#v2=[1,2,3]
print(id(v1),id(v2))#
3.python小数据池缓存机制:
- 优化功能 某些条件的相同值不会被重新开辟内存空间
- 1.int: -5<=num<=256:内存地址相同
- "Gao"/"ddjdj" ——>相同地址/"f_"*3类型除外
#1.int -5<=num<=256:内存地址相同
v1=1
v2=1
id(v1)==id(v2)#True
2.v1=257
v2=257
print(id(v1),id(v2))#False
2.字符串:"Gao"/"ddjdj" ---->/"f_"*3类型除外
str1="Gao"
str2="Gao"
id(str1)==id(str2)#True
4.易考点 == / is
== 和 is 的区别
== 和 is 的区别
1.==是 值比较
is 是地址比较
(注意考虑小数据池缓存机制)
v1=[1,2,3]
v2=[1,2,3]
print(v1==v2) #True
print(v1 is v2)#False
v1=[1,2,3]
v2=v1
print(v1==v2) #True
print(v1 is v2)#True
v1=[1,2,3]
v2=[1,2,3,4]
print(v1==v2) #False
print(v1 is v2)#False
#小数据池缓存机制
v1=10
v2=10
print(v1==v2) #True
print(v1 is v2)#True
#2.num>256
v1=1000
v2=1000
print(v1==v2) #True
print(v1 is v2)#False
day06 内存地址 小数据池缓存机制的更多相关文章
- day06——小数据池、深浅拷贝、集合
day06 小数据池 小数据池--缓存机制(驻留机制),只是一种规格,不会实际的开辟一个空间 == 判断两边内容是否相等 ***** # a = 10 # b = 10 # print(a == b) ...
- python27期day06:小数据池、深浅拷贝、集合、作业题。
0.pycharm是代码块.黑窗口是小数据池.如下图: 1.驻留机制(长得像的共用一个内存地址)分小数据池缓存机制:后期开发时能明确知道.为什么不能正常使用.把经常用的东西放入规则(黑窗口)里. 数字 ...
- 小数据池 is 和 ==的区别
小数据池 一.小数据池 1)代码块 python程序是由代码块构成的,一个代码块的文本作为pythont程序执行的单元 官方文档: A Python program is constructed fr ...
- python基础知识四 小数据池,深浅拷贝,集合+菜中菜
四.小数据池,深浅拷贝,集合+菜中菜 1小数据池 --缓存机制(驻留机制) '==' 判断两边内容是否相等 'is' 基于内存地址进行判断是否相同 a = 10 b = 10 print(a ...
- 百万年薪python之路 -- 小数据池和代码块
1.小数据池和代码块 # 小数据池 -- 缓存机制(驻留机制) # == 判断两边内容是否相等 # a = 10 # b = 10 # print(a == b) # is 是 # a = 10 # ...
- 6.Python初窥门径(小数据池,集合,深浅拷贝)
Python(小数据池,集合,深浅拷贝) 一.小数据池 什么是小数据池 小数据池就是python中一种提高效率的方式,固定数据类型,使用同一个内存地址 小数据池 is和==的区别 == 判断等号俩边的 ...
- python的代码块缓存机制,小数据池机制。
同一代码块的缓存机制 在python中一个模块,一个函数,一个类,一个文件等都是一个代码块. 机制内容:Python在执行同一个代码块的初始化对象的命令时,会检查是否其值是否已经存在,如果存在,会将其 ...
- Python二次编码、小数据池之心照神交
二次编码.解码.小数据池: encode(str:编码):参数编码方式,返回字节码. str_1 = "编码" str_2 = str_1.encode("utf-8&q ...
- python基础之小数据池
一,id,is,== 在Python中,id是什么?id是内存地址,比如你利用id()内置函数去查询一个数据的内存地址: name = '太白' print(id(name)) # 158583128 ...
随机推荐
- ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
centos7.5 使用into outfile备份失败 问题: mysql> select * from world.city into outfile '/tmp/world_city.da ...
- centos6.5下安装tomcat
linux在安装tomcat之前必须已安装jdk 已下载好tomcat 拖到centos系统的桌面 现在在桌面目录下 mv apache-tomcat-8.5.39.tar.gz /usr/local ...
- 使用MyBatis Generator 1.3.7自动生成代码
MyBatis Generator是一款mybatis自动代码生成工具,可以通过配置后自动生成文件. MyBatis Generator有几种方法可以生成代码,下面是其中一种. 一.官网下载 MyB ...
- IdentityServer4中Code/Token/IdToken对应可访问的资源(api/identity)
{ OidcConstants.ResponseTypes.Code, ScopeRequirement.None }, { OidcConstants.ResponseTypes.Token, Sc ...
- JAVA中的责任链模式(CH02)
对责任链CH01做出优化,解决耦合度太高问题 记得上一篇我们使用的是抽象类,然后用子类去继承的方法实现等级的桥接,从而发现了耦合度太高. 为了解决这个问题. 我们本次使用接口进行抽象,然后使用到一个” ...
- Unity3D外包(u3d外包)—就找北京动点软件(我们长年承接U3D外包、Maya、3DMax项目外包)
一.关于动点: 北京动点飞扬软件,因致力于虚拟现实技术的开发而创立,在虚拟现实开发领域有着卓越的技术和领先的思想. 我们为用户专业定制的项目,细分了多种工作流程,软件独立自主研发,编程简化用户操作 ...
- nodeJs的Buffer操作
再nodejs里,很多类是引入模块才能使用,Buffer是一个全局类,他不需要require引入 Buffer有三种构造函数 //1.在构造函数传一个数字,规定buffer的长度.默认全是16进制的0 ...
- haoop fs 命令
Hadoop fs 命令详解 参考文档:https://hadoop.apache.org/docs/r2.7.1/hadoop-project-dist/hadoop-common/FileSy ...
- 雷林鹏分享:jQuery EasyUI 数据网格 - 合并单元格
jQuery EasyUI 数据网格 - 合并单元格 数据网格(datagrid)经常需要合并一些单元格.本教程将向您展示如何在数据网格(datagrid)中合并单元格. 为了合并数据网格(datag ...
- ONOS架构-系统组件
系统组件 系统分层 App/core/providers 业务和子系统 一个业务service是有多个组件构成的功能单元,基于各层软件栈提供一个垂直的分片slice,将构成业务service的组件集合 ...