今天的目录是

1.小数据池

2.深浅copy

正文开始

1.小数据池

在说明今天的内容前,先说明一个在今天重复用到的一个知识点

###比较’=’俩边的数据是否完全相同,以及判断一个对象的内存地址是否完全相同###

#今天的内容深入研究还是很难再短时间内讲清楚,今天只是浅浅的讲一下

1.1#is判断等号俩边的数据是否相等

#id判断一个对象的内存地址是否完全相同

name ='alex'
name1 ='alex1'
print(id(name))
print(id(name1))
print(name is name1)
#结果
2434239272024
2434240176512
False

可以明显的看到俩个name的值虽然相同,可是俩者在内存中的地址是完全不同的

1.2 python中的俩种优化机制

1.2.1 代码块

代码块:代码全部都是基于代码块去实现的(好比一个学校给一个班级下发命令),一个文件就是一个代码块,不同的文件就是不同的代码块

终端:对于终端,例如pc中的cmd执行python,一行就是一个代码块

代码块的缓存机制:

python在执行同一个代码块的初始化对象的命令时,会检查是否其值是否已经存在,如果存在,会将其重用

换一句话说:在执行同一个代码块的时候,遇到新的变量,会将初始化的这个变量与值存储在一个字典中,遇到新的变量,会先从字典中查询记录,如果有重复的值则重复利用

注意:机制只能在同一个代码块下才能实现,满足此机制的数据类型有:int str bool

优点:
1.节省内存

2.提升性能

1.2.2 小数据池

小数据池:又叫驻留机制,驻村机制,字符串的驻存机制,字符串的缓存机制等等,主要是用于不同代码块的优化

适应的数据类型:str bool int

int:-5~256

str:一定条件下的str满足小数据池

bool值全部

优点:

1.节省内存

2.提升性能

总结:如果在同一个代码块中,用同一个代码块中的缓存机制,如果在不同的代码块中,用小数据池

2.深浅copy

l1 =[1,2,3,4]
l2 = l1
l2.append(666)
print(l1,l2)
#结果
[1, 2, 3, 4, 666] [1, 2, 3, 4, 666]

2.1 浅copy

在内存中创建一个新的list(dict),但是新的列表中的元素还是与原列表共用一个

l1 =[1,2,3,4]
l2 = l1
l2.append(666)
print(l1,l2)
l1 = [1, 'alex', [11,22]]
l2 = l1.copy()
print(id(l1),id(l2))
l1.append(33)
print(l1,l2)
print(id(l1[0]))
print(id(l2[0]))
print(id(l1[-1]))
print(id(l2[-1]))
print(l1 is l2)
l1[-1].append(666)
print(l1)
print(l2)

图示如下

2.2 深copy

深copy会在内存中对原列表(dict)以及列表里面的可变的数据类型重新创建一份,而列表中不可变的数据类型还是沿用原来的。

import copy
l1 = [1, 'alex', [11,22]]
l2 = copy.deepcopy(l1)
# l1[0] = 1000
print(l1)
print(l2)
# print(id(l1))
print(id(l2))
print(id(l1[-1])) #
print(id(l2[-1])) #
print(id(l1[0]))
print(id(l2[0]))
l1[-1].append(666)
print(l1)
print(l2)

全切得到的列表是对原列表进行的浅copy

l1 = [1, 2, 3, [22,33]]
l2 = l1[:] # [::] #列表的全切
l1[-1].append(666)
print(l2)

图示如下

正常情况如下

在python内部机制优化后,对于int,str,元祖等不可变量继续沿用copy前的内存地址,对于列表字典等可变元素采用开辟新的空间

图示如下

day4-python基础-小数据池以及深浅copy浅讲的更多相关文章

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

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

  2. python的小数据池和深浅拷贝

    小数据池 一种数据缓存机制,也称驻留机制 在同一代码块,相同的值不会开辟新的内存 特殊字符除外 小数据池只针对:在控制台时! 数字 :-5到256间的整数会被缓存 布尔值:都会缓存8 字符串 小于等于 ...

  3. python基础--小数据池,代码块的最详细、深入剖析

    本文转至太白金星 一,id,is,== 在Python中,id是什么?id是内存地址,那就有人问了,什么是内存地址呢? 你只要创建一个数据(对象)那么都会在内存中开辟一个空间,将这个数据临时加在到内存 ...

  4. Python基础知识(六)------小数据池,集合,深浅拷贝

    Python基础知识(六)------小数据池,集合,深浅拷贝 一丶小数据池 什么是小数据池: ​ 小数据池就是python中一种提高效率的方式,固定数据类型使用同一个内存地址 代码块 : ​ 一个文 ...

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

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

  6. Python 入门之代码块、小数据池 与 深浅拷贝

    Python 入门之代码块.小数据池 与 深浅拷贝 1.代码块 (1)一个py文件,一个函数,一个模块,终端中的每一行都是代码块 (代码块是防止我们频繁的开空间降低效率设计的,当我们定一个变量需要开辟 ...

  7. python之小数据池

    代码块 Python 程序 是由代码块构造的.块是一个python程序的文本,它是作为一个执行单元的. 代码块:一个模块,一个函数,一个类,一个文件等都是一个代码块. 而作为交互方式输入的每个命令都是 ...

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

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

  9. python的小数据池

    一.什么是小数据池? 小数据池是一种缓存机制,也被称为驻留机制.各种编程语言中都有类似的东西(常量池.小数据池都是指得同一个内容). python自动将-5~256的整数.有一定规则的字符串.都放在一 ...

随机推荐

  1. 道路运输车辆卫星定位系统JT/T808服务实现和压测

    在工作上的需要接触道路运输车辆卫星定位系统相关应用,由于自己对网络服务的编写比较感兴趣,所以利用空闲时间实现了JT/T808的一些协议和相关服务(不得不说这种协议的设计在解释的确导致性能上的损耗,特别 ...

  2. nginx部署~dotnetCore+mvc网站502

    这个不是nginx的问题,也不是dotnet core的问题,也不是mvc的问题,更不是防火墙的问题! 原因在于这个SeLinux 把它关了就可以了 setsebool -P httpd_can_ne ...

  3. iOS逆向开发(6):微信伪造位置

    仍然以微信为例,实战地练习一下使用Reveal.iOSOpenDev等工具注入APP的流程,积累经验.这一系列的文章都是学习过程的总结,不带任何商业目的. 本文解决一个问题:如何伪造一个经纬度,在微信 ...

  4. 隔离 docker 容器中的用户

    笔者在前文<理解 docker 容器中的 uid 和 gid>介绍了 docker 容器中的用户与宿主机上用户的关系,得出的结论是:docker 默认没有隔离宿主机用户和容器中的用户.如果 ...

  5. [十七]基础类型BigDecimal简介

      BigDecimal是不可变的.任意精度的.有符号的.十进制数.   组成部分 BigDecimal 由任意精度的整数非标度值 和 32 位的整数标度 (scale) 组成 BigDecimal ...

  6. Mybaits之Mapper动态代理开发

    Mybaits之Mapper动态代理开发 开发规范: Mapper接口开发方法只需要程序员与Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法 ...

  7. CSS代码片段

    定位: 将元素居中 将元素水平居中 将元素垂直居中 样式: 文字毛玻璃效果 -------------------------------------------代码----------------- ...

  8. SAP MM 可以不用创建盘点凭证直接录入盘点结果?

    SAP MM 可以不用创建盘点凭证直接录入盘点结果? 可以.SAP标准功能就支持这么做. 事务代码 MI09 (Enter Count w/o Reference to Document), 输入pl ...

  9. DVWA 黑客攻防演练(九) SQL 盲注 SQL Injection (Blind)

    上一篇文章谈及了 dvwa 中的SQL注入攻击,而这篇和上一篇内容很像,都是关于SQL注入攻击.和上一篇相比,上一篇的注入成功就马上得到所有用户的信息,这部分页面上不会返回一些很明显的信息供你调试,就 ...

  10. DVWA 黑客攻防演练(三)命令行注入(Command Injection)

    文章会讨论 DVWA 中低.中.高.不可能级别的命令行注入 这里的需求是在服务器上可以 ping 一下其他的服务器 低级 Hacker 试下输入 192.168.31.130; cat /etc/ap ...