python基础4(小数据池,编码,深浅拷贝)
1、==与is
- == 比较值是否相等
- is比较内存地址是否相同
2、小数据池
- 为了节省内存,当数据在一个范围里的时候,两个值相同的变量指向的是小数据池里的同一个地址
- 数字范围:-5 ~ 256
num1 = 3
num2 = 3
i1 = id(num1)
i2 = id(num2)
#此时i1==i2
3、编码
- ascii: 8位 1字节 表示一个字符
- unicode: 32位 4字节 表示一个字符
- utf-8
- 英文 8位 1字节
- 欧洲 16位 2字节
- 亚洲 24位 3字节
- gbk
- 英文 8位 1字节
- 中文 16位 2字节
- 各个编码之间的二进制,是不能互相识别的,会产生乱码
- 文件的传输,存储不能是unicode(只能是utf-8、utf-16、gbk、gb2312、ascii等)
- python3中str是使用unicode编码的

4、深浅拷贝
- 原因:共享内存导致的结果
- 如果通过赋值,使两个变量指向同一个内存地址(可变数据类型),则修改其中的一个,另一个也会跟着修改。如果是不可变数据类型(如字符串),修改一个另一个不会变
li1 = [1,2,3]
li2 = li1 li2[0] = 2
print(li) # -> [2,2,3] - 浅拷贝:数据半共享,复制的数据独立存放在其他内存中,但是只复制第一层。如果是列表等可变数据类型,拷贝的是内存地址,所以修改这类元素,还是会全都改变
li1 = [1,2,3,[4,5]] li2 = li1.copy() #修改第一层
li2[0] = 3 #此时:li2 = [3,2,3,[4,5]]
#但li1未更改:li1 = [1,2,3,[4,5]] #修改其中的列表
li2[3][1] = 9 #此时:li2 = [3,2,3,[4,9]]
#li1对应元素修改:li1 = [1,2,3,[4,9]]从内存来看:

- 深拷贝:数据完全不共享,复制的数据完全独立放到另一个内存中,包括可变数据类型的内容
import copy #使用深拷贝需要导入copy
li1 = [1,2,3,[4,5]] li2 = copy.deepcopy(li1) #深拷贝 #此时修改li2的所有元素,li1都不会改变
li2[3][0] = 777 #li1仍是[1,2,3,[4,5]]
python基础4(小数据池,编码,深浅拷贝)的更多相关文章
- Python基础知识(六)------小数据池,集合,深浅拷贝
Python基础知识(六)------小数据池,集合,深浅拷贝 一丶小数据池 什么是小数据池: 小数据池就是python中一种提高效率的方式,固定数据类型使用同一个内存地址 代码块 : 一个文 ...
- python基础知识四 小数据池,深浅拷贝,集合+菜中菜
四.小数据池,深浅拷贝,集合+菜中菜 1小数据池 --缓存机制(驻留机制) '==' 判断两边内容是否相等 'is' 基于内存地址进行判断是否相同 a = 10 b = 10 print(a ...
- 6.Python初窥门径(小数据池,集合,深浅拷贝)
Python(小数据池,集合,深浅拷贝) 一.小数据池 什么是小数据池 小数据池就是python中一种提高效率的方式,固定数据类型,使用同一个内存地址 小数据池 is和==的区别 == 判断等号俩边的 ...
- Python 入门之代码块、小数据池 与 深浅拷贝
Python 入门之代码块.小数据池 与 深浅拷贝 1.代码块 (1)一个py文件,一个函数,一个模块,终端中的每一行都是代码块 (代码块是防止我们频繁的开空间降低效率设计的,当我们定一个变量需要开辟 ...
- python基础之小数据池、代码块、编码和字节之间换算
一.代码块.if True: print(333) print(666) while 1: a = 1 b = 2 print(a+b) for i in '12324354': print(i) 虽 ...
- python基础之小数据池、代码块、编码
一.代码块.if True: print(333) print(666) while 1: a = 1 b = 2 print(a+b) for i in '12324354': print(i) 虽 ...
- python基础之小数据池,is和==区别 编码问题
主要内容 小数据池,is和==区别 编码问题 小数据池 一种缓存机制,也称为驻留机制,是为了能更快提高一些字符串和整数的处理速度is 和 == 的区别 == 主要指对变量值是否相等的判断,只要数值相同 ...
- Python基础篇 -- 小数据池和再谈编码
小数据池 1. id() 通过id()可以查看到一个变量表示的值在内存中的地址 s = "Agoni" print(id(s)) # 2410961093272 2. is 和 = ...
- python基础之小数据池
一,id,is,== 在Python中,id是什么?id是内存地址,比如你利用id()内置函数去查询一个数据的内存地址: name = '太白' print(id(name)) # 158583128 ...
- python的小数据池和深浅拷贝
小数据池 一种数据缓存机制,也称驻留机制 在同一代码块,相同的值不会开辟新的内存 特殊字符除外 小数据池只针对:在控制台时! 数字 :-5到256间的整数会被缓存 布尔值:都会缓存8 字符串 小于等于 ...
随机推荐
- tyvj1864 [Poetize I]守卫者的挑战
期望dp 不考虑打的顺序,只要最后能把地图都装下就行了,因此把概率和容量装进一个结构体里面,把地图放后面. 记一个状态f[i][j][k]表示前i个比赛,赢了j场,容量k的期望,转移即可. #incl ...
- Shell(三)流程控制
Shell 流程控制 和Java.PHP等语言不一样,sh的流程控制不可为空,如(以下为PHP流程控制写法): <?php if (isset($_GET["q"])) { ...
- js实现点击复制网页内容(基于clipboard.js)
浏览网页过程中会遇到点击复制链接地址的情况,下面就介绍一种实现方法,该方法是基于clipboard.js: 官网地址:https://clipboardjs.com/: clipboard.js使用比 ...
- linux内核(二)内核移植(DM365-DM368开发攻略——linux-2.6.32的移植)
一.介绍linux-2.6.32: Linux-2.6.32的网上介绍:增添了虚拟化内存 de-duplicacion.重写了 writeback 代码.改进了 Btrfs 文件系统.添加了 ATI ...
- WinServer-IIS-Dynamic IP Restrictions
动态IP限制 来自为知笔记(Wiz)
- POJ 1721
好像不需要用到开方什么的... 可以知道,一副牌即是一个循环,那么,由于GCD(L,K)=1,所以一次洗牌后,亦是一个循环.其实,K次洗牌等于是T^(2^K)了.既然是循环,必定有周期.那么,周期是多 ...
- github上Devstack的一些变动,截至8.20
从github下直接clone下来的代码在执行之前须要对一些文件进行改动,否则会出现关于REQUIREMENTS的错误 说明:代码前边是"-"号的,须要删除,代码前边是" ...
- sql server执行动态拼接sql(带传参数)和去掉小数点后0的函数
1 exec sp_executesql N'SELECT 2 [Extent2].[Id] AS [Id], 3 [Extent2].[Name] AS [Name], 4 [Extent2].[D ...
- legend---十一、thinkphp事务中if($ans1&&$ans2){}else{}方式和try{}catch{}方式事务操作的区别在哪里
legend---十一.thinkphp事务中if($ans1&&$ans2){}else{}方式和try{}catch{}方式事务操作的区别在哪里 一.总结 一句话总结:执行的条件其 ...
- Python一行代码获得IP地址
比较靠谱的方法, 通过构造UDP包获得本机IP地址 python -c "import socket;print([(s.connect(('8.8.8.8', 53)), s.gets ...