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 字符串 小于等于 ...
随机推荐
- IOS - PDF合并
#pragma mark - Merge PDF - (void)mergePDF { NSArray *paths = NSSearchPathForDirectoriesInDomains(NSD ...
- springboot---web 应用开发-文件上传
一.Spring Boot 默认使用 springMVC 包装好的解析器进行上传 二.添加代码 <form method="POST" enctype="multi ...
- 正式版的Linux Kernel 5.1来了,非LTS
大神Linus Torvalds于今天发布了Linux Kernel 5.1内核正式版,在对现有功能进行改进的同时还带来了很多重要的改进.本次版本更新历时一个半月,不过值得注意的是它并非是长期支持版本 ...
- MyEclipse背景与字体大小和xml文件中字体大小调整
1.打开window / Preference,弹出Preference面板 2.展开General标签,选中Editors选项,展开. 3.选中 Text Editors,右边出现TestEdito ...
- 2015 Multi-University Training Contest 3 hdu 5324 Boring Class
Boring Class Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tota ...
- POJ 1942
开始时竟然用了分情况讨论. 仔细思考一下,哈哈,发现不过是多重集合的组合数而已. #include <iostream> #include <cstdio> #include ...
- EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER
EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER ...
- Detours改动段属性漏洞
v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...
- EF的CRUD
已经知道EF就是一个能够使得编程人员用面向对象的思想操作数据库的框架,那么在最初学习SQL的时候我们就知道对数据库的操作就是增删改查.万变不离其宗. EF也是操作数据库的当然也就是要对数据库实现增删改 ...
- pyspark kafka createDirectStream和createStream 区别
from pyspark.streaming.kafka import KafkaUtils kafkaStream = KafkaUtils.createStream(streamingContex ...