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 内存地址 小数据池缓存机制的更多相关文章

  1. day06——小数据池、深浅拷贝、集合

    day06 小数据池 小数据池--缓存机制(驻留机制),只是一种规格,不会实际的开辟一个空间 == 判断两边内容是否相等 ***** # a = 10 # b = 10 # print(a == b) ...

  2. python27期day06:小数据池、深浅拷贝、集合、作业题。

    0.pycharm是代码块.黑窗口是小数据池.如下图: 1.驻留机制(长得像的共用一个内存地址)分小数据池缓存机制:后期开发时能明确知道.为什么不能正常使用.把经常用的东西放入规则(黑窗口)里. 数字 ...

  3. 小数据池 is 和 ==的区别

    小数据池 一.小数据池 1)代码块 python程序是由代码块构成的,一个代码块的文本作为pythont程序执行的单元 官方文档: A Python program is constructed fr ...

  4. python基础知识四 小数据池,深浅拷贝,集合+菜中菜

    四.小数据池,深浅拷贝,集合+菜中菜 1小数据池 --缓存机制(驻留机制) ​ '==' 判断两边内容是否相等 ​ 'is' 基于内存地址进行判断是否相同 a = 10 b = 10 print(a ...

  5. 百万年薪python之路 -- 小数据池和代码块

    1.小数据池和代码块 # 小数据池 -- 缓存机制(驻留机制) # == 判断两边内容是否相等 # a = 10 # b = 10 # print(a == b) # is 是 # a = 10 # ...

  6. 6.Python初窥门径(小数据池,集合,深浅拷贝)

    Python(小数据池,集合,深浅拷贝) 一.小数据池 什么是小数据池 小数据池就是python中一种提高效率的方式,固定数据类型,使用同一个内存地址 小数据池 is和==的区别 == 判断等号俩边的 ...

  7. python的代码块缓存机制,小数据池机制。

    同一代码块的缓存机制 在python中一个模块,一个函数,一个类,一个文件等都是一个代码块. 机制内容:Python在执行同一个代码块的初始化对象的命令时,会检查是否其值是否已经存在,如果存在,会将其 ...

  8. Python二次编码、小数据池之心照神交

    二次编码.解码.小数据池: encode(str:编码):参数编码方式,返回字节码. str_1 = "编码" str_2 = str_1.encode("utf-8&q ...

  9. python基础之小数据池

    一,id,is,== 在Python中,id是什么?id是内存地址,比如你利用id()内置函数去查询一个数据的内存地址: name = '太白' print(id(name)) # 158583128 ...

随机推荐

  1. P3181 [HAOI2016]找相同字符

    思路 广义SAM 把两个字符串建成广义SAM,然后统计两个SAM中相同节点的endpos大小乘积即可 记得开long long 代码 #include <cstdio> #include ...

  2. jsp/servlet学习一之servlet初窥

    Java Servlet技术简称Servlet技术,是java开发web应用的底层技术.Servlet是一个java程序,一个servlet应用有一个或多个Servlet程序.jsp页面会被转换和编译 ...

  3. win10 处理程序“ExtensionlessUrlHandler-Integrated-4.0”在其模块列表中有一个错误模块“ManagedPipelineHandler”

    更新Win10,原来的IIS站点访问不了,原因是因为IIS 没有.net 4.5,使用网上的aspnet_regiis.exe -i命令,一点都不靠谱,直接提示: C:\WINDOWS\system3 ...

  4. Caused by: java.lang.NoClassDefFoundError: com/google/common/base/MoreObjects

    环境:jdk1.8 开发工具:IDEA 说明:今天在做springboot集成swagger2的时候,在启动程序的时候,报错 报错信息: Error starting ApplicationConte ...

  5. helm安装 删除

      要安装对应k8s版本的helm https://github.com/helm/helm/releases #wget https://storage.googleapis.com/kuberne ...

  6. Matlab:导数边界值的有限元(Ritz)法

    tic; % this method is transform from Ritz method %is used for solving two point BVP %this code was w ...

  7. DataSet select 的使用

    1) Select()——获取所有 System.Data.DataRow 对象的数组. 2) Select(string filterExpression)——按照主键顺序(如果没有主键,则按照添加 ...

  8. UI 增加文本

    1.直接在节点上增加VALUE NODE. 2.写GET,SET,I,P的相关实现 method GET_ZH12. DATA: lr_current TYPE REF TO if_bol_bo_pr ...

  9. Vue.js 3.0 新特性预览

    总结起来,Vue 3 以下方面值得我们期待 : 更快 更小 更易于维护 更多的原生支持 更易于开发使用 完整的PPT:docs.google.com/presentatio… Evan 和 Vue 团 ...

  10. c# Excel 行高、列宽、合并单元格、单元格边框线、冻结

    http://www.2cto.com/kf/201007/52724.html 新增选择整列: Range = ((Range)(WALeTieSheet.Cells[1, PwCStartCol_ ...