今天的目录是

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. Spring Boot2.0 设置拦截器

    所有功能完成 配置登录认证 配置拦截器 在spring boot2.0 之后 通过继承这个WebMvcConfigurer类 就可以完成拦截 新建包com.example.interceptor; 创 ...

  2. Linux 虚拟内存

    查看进程占用内存情况: ps -aux VSZ表示占用虚拟内存单位KBRSS表示占用物理内存单位KB 添加swap文件大小为4G 内部存储块每块1M dd if=/dev/zero of=/swap ...

  3. RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2->Web版本模块管理界面新增模块排序功能

    模块(菜单)的排序是每个系统都必须要有的功能,我们框架模块的排序在业务逻辑中已经体现. WinForm版本可以直接在界面上对模块进行排序以控制模块展示的顺序.Web版本在3.2版本中也新增了直接可以模 ...

  4. springboot情操陶冶-web配置(四)

    承接前文springboot情操陶冶-web配置(三),本文将在DispatcherServlet应用的基础上谈下websocket的使用 websocket websocket的简单了解可见维基百科 ...

  5. React Fiber源码分析 (介绍)

    写了分析源码的文章后, 总觉得缺少了什么, 在这里补一个整体的总结,输出个人的理解~ 文章的系列标题为Fiber源码分析, 那么什么是Fiber,官方给出的解释是: React Fiber是对核心算法 ...

  6. Could not load file or assembly 'System.ValueTuple'

    项目目标框架:.Net Framework 4.6.2 报错:Could not load file or assembly 'System.ValueTuple' 在4.6.2项目中,想要使用C#7 ...

  7. JavaScript_01简介,基本语法,运算符

    JavaScript(不是JScript和scriptease) 1.js分为内部引用和外部引用,无论是内部引用还是外部引用,都可以放在html(除标签内)的任意位置,但是定义的位置会影响执行的顺序 ...

  8. JAVA_内部类

    内部类 什么是内部类? 将一个类A定义在另一个类B里面,里面的那个类A就称为内部类,B则称为外部类 成员内部类:定义在类中方法外的类 定义格式示例: public class Tesdt { publ ...

  9. Python全栈学习_作业集锦(持续更新)

    python基础 day1 python初识 . 计算机基础(cpu,内存,硬盘,操作系统) . Python出生于应用 . python发展史 . 编程语言分类 . python优缺点 . pyth ...

  10. Android下获取FPS的几种方法

    FPS(Frames Per Second)是关乎Android用户体验最为重要的指标之一,而在VR中更是如此.为了评估VR系统.VR SDK及Unity应用的性能,通常会实时获取FPS并将其显示出来 ...