1.自动类型转换

当2个不同类型的数据进行运算的时候,默认向更高精度转换

数据类型精度从低到高:bool  < int < float <complex

1,1强制类型转换

# Number 部分
int : 整型 浮点型 布尔类型 纯数字字符串
float : 整型 浮点型 布尔类型 纯数字字符串
complex: 整型 浮点型 布尔类型 纯数字字符串(复数)
bool : (容器类数据类型 / Number类型数据 都可以) # 容器类型部分
str: (容器类型数据 / Number数据类型都可以)
list: 字符串 列表 元组 集合 字典
tuple: 字符串 列表 元组 集合 字典
set: 字符串 列表 元组 集合 字典 (注意相同的值,只会保留键)
dict: 使用二级列表,二级元组,二级集合(里面的容器数据只能是元组)

1.2 字典和集合的注意点

1.2.1 字典的键和集合中的值都是唯一值,不可重复:

  为了保证数据的唯一性,

  用哈希算法加密字典的键得到一个字符串。

  用哈希算法加密集合的值得到一个字符串。

  如果重复,他们都是后面的替换前面的,自动去重。

1.2.2版本导致的区别:

  3.6版本之前都是  字典和集合都是无序的

  3.6版本之后,把字典的字面顺序记录下来,当从内存拿数据的时候根据字面顺序重新排序,所以看起来像有序,但本质上无序

1.2.3可哈希的数据:

可哈希数据(不可变的数据类型):Number(int float bool complex),str,tuple

不可哈希数据(可变的数据类型):list set dict

2.数据在内存中的缓存机制

2.1在同一文件(模块)里,变量的存储缓存机制(仅对3.6版本)

#--->Number 部分
1.对于整型而言,-5~正无穷范围内的相同值,id一致
2.对于浮点数而言,非负数范围内的相同值,id一致
3.布尔值而言,值相同情况下,id一致
4.复数在 实数+虚数 这样的结构中永不相同,除非只有虚数的时候,id一致 #--->容器类型部分
1.字符串 和 空元组 相同的情况下,地址相同
2.列表,元组,字典,集合无论什么情况 ,id都不一致(只有空元组除外)

  

2.2不同文件(模块)里,部分数据驻留小数据池中(仅对3.6版本)

小数据池,只针对:int ,str,bool,空元组(),None关键字,这些数据类型有效
#(1)对于int而言
python在内存中创建了-5~256范围的整数,提前驻留在了内存的一块区域
如果是不同文件(模块)里的两个变量,声明同一个值,在-5~256这个范围里,
那么id一致,让两个变量的值同时指向一个值的地址,节省空间

#(2)对于str来说:
1.字符串的长度为0或1,默认驻留小数据池
2.字符串的长度>1,且只含有大小写字母,数字,下划线时,默认驻留小数据池

3.用*号得到的字符串,分两种情况
1)乘数等于1时:无论什么字符串*1,都默认驻留小数据池
2)乘数大于1时:乘数大于1时,仅包含数字,字母,下划线时会被缓存,但字符串长度不能大于20(乘以乘数后得到的字符串)

#(3)指定驻留
#从sys模块引入intern函数,让a,b两个变量指向同一个值
from sys import intern
a = intern('大哥&*^^1234'*10)
b = intern('大哥&*^^1234'*10)
print(a is b)
#可以指定任意字符串加入到小数据池中,无论声明多少个变量,只要值相同,都指向同一个数据池

  

2.3缓存机制的意思

无论是变量缓存机制还是小数据池的驻留机制,都是为了节省内存空间,提升代码效率

总结:今天主要讲了6个部分

  1.set_dict的作用

  2.变量的缓存机制

  3.Number强制类型转换

  4.Number自动类型转换

  5.容器类型的强制转换

  6.字典的强转

第一部分:.set集合的作用(无序,自动去重),集合的元素不可获取,同时也不能修改,定义一个空的集合,需要用set()。字典的作用(键值对的存储形式,表面上有序,实际上无序),获取字典的中的值通过字典的key获取:变量名[‘key值’],修改字典的值:变量名['key值'] = 新v值。定义一个空的字典,dictvar = {}。字典的键和集合 的值要求不可变的数据类型即int,float,bool,complex,str,tuple。

第二部分:针对3.6版本Number类型的缓存机制,如int整型数值在-5~正无穷范围内相同的值,id都是相同的。浮点型,数值为非负数的相同值,id都是相同的。布尔值,值相同的情况下,id都是相同的。复数,在实数+虚数 这样的结构中永远不相同(除非只有虚数的情况下,id是相同的)。然后就是容器类型部分的缓存机制,字符串和空元组相同值的情况下,id都是相同的。列表,元组,字典,集合在任何情况下,id都是不相同的(除了空元组)

第三部分:Number类型的强转,int强制转换成整型的有(float,bool,全数字字符串,),float强制转换成浮点型的有(int,bool,全数字字符串,),complex强制转换成复数的有(int,float,bool,全数字字符串),bool强制转换成布尔类型的有(任何类型都可以),以及布尔类型为假的十种情况(0,0.0,'',False,0j,().[],{},set(),None)

第四部分:Number类型自动转换,默认从低精度往高精度转,依次从最低顺序是bool,int,float,complex

第五部分:容器类型的强制转换(str,tuple,list,dict,set),str字符串,容器类型数据及Number数据都可以转换,只要在原有数据类型上套上引号即可。顺带讲了如何原型化输出字符串,需要用到repr函数,用法repr(得到的结果)。list列表,如果是字符串,会把每一个字符串中的字符单独作为一个元素添加到列表中,如果是字典,只保留键,然后添加到列表,如果是其他容器,改成列表括号[]就可以。tuple元组,如果是字符串,会把每一个字符串中的字符单独作为一个元素添加到列表中,如果是字典,只保留键,然后添加到列表,如果是其他容器,改成元组括号()就可以。set集合,如果是字符串,会把每一个字符串中的字符单独作为一个元素添加到集合中,如有重复的字符,会自动去重,如果是字典,只保留键,添加到集合中,如果是其他数据类型,改成集合括号{}即可

第六部分:介绍了二级容器,多级容器,包括二级列表,二级元组,二级集合,二级字典,其中二级集合中,集合嵌套集合的时候,二级集合需要用元组()来表示。多级容器时,可通过索引下标获取对应的值。字典的强转,强制转为字典时,必须是等长的二级容器,且元素个数为2,超过即报错。可以转换字典的二级容器数据,外层可以是列表或元组或集合,里面的容器是元组或列表(推荐使用)。外层是列表或元组,里面是集合,语法上允许,有局限性,因为二级容器集合是无序的,会导致kv的值随机互换(不推荐使用)。外层是列表或元组或集合,里面是字符串,语法上允许,但有局限性,原因是字符串的长度不能超过2位,超过即会报错(不推荐使用)。

6大数据类型之间的转换及数据在内存中的缓存机制----day03的更多相关文章

  1. java中的、标识符、运算符以及数据类型之间的转换。

    ---恢复内容开始--- 数据类型之间的转换: 1:自动转换:就是不用说出要转换成什么类型,由java中的虚拟机自动将小数据类型转换成大数据类型,但大数据中的数据精度有可能被破坏. 2:强制转换:强制 ...

  2. 浅谈C#语言中的各种数据类型,与数据类型之间的转换

    什么是数据类型? 数据类型,百度百科是这样解释的:数据类型在数据结构中的定义是一个值的集合以及定义在这个值集上的一组操作.这样的解释对于一个初学者来说未必太过于深奥. 简单点说,数据类型就是不同长度的 ...

  3. 10-10C#基础---数据类型之间的转换

    10-10  C#基础数据类型转换(熟练掌握) 第一课 数据类型之间的转换 基本类型的转换:自动转换(隐式转换)和强制转换(显示转换) 装箱转换:允许值类型隐式转换成引用类型. 拆箱转换:允许将引用类 ...

  4. 记录我的 python 学习历程-Day07 基础数据类型进阶 / 数据类型之间的转换 / 基础数据类型总结 / 编码的进阶

    基础数据类型 str(字符串) str:补充方法练习一遍就行 s.capitalize() 首字母大写,其余变小写 s = 'dyLAn' print(s.capitalize()) # Dylan ...

  5. Java基础——数据类型之间的转换

    Java数据类型分为三大类,即布尔型.字符型和数值型.其中数值型又分为整型和浮点型.Java的基本数据类型(8种)为布尔型boolean(1字节):字符型char(2字节):整型byte(1字节).s ...

  6. Java中的基本数据类型和基本数据类型之间的转换

    在Java中有8中基本数据类型,分别为: 整型: byte.short.int.long 浮点型:float.double 布尔型:boolean 字符型:char. byte:    8位,  封装 ...

  7. JavaSE:数据类型之间的转换(附常见面试题)

    数据类型之间的转换 分为以下几种情况: 1)低级到高级的自动类型转换: 2)高级到低级的强制类型转换(会导致溢出或丢失精度): 3)基本类型向类类型转换: 4)基本类型向字符串的转换: 5)类类型向字 ...

  8. 系统学习(javascript)_基础(数据类型之间的转换)

    在js中数据类型转换一般分为两种,即强制类型转换和隐式类型转换(利用javascript弱变量类型转换). 强制转换: 利用js提供的函数parseInt(),parseFloat(),Number( ...

  9. JavaScript中基本数据类型之间的转换

    在JavaScript中共有六种数据类型,其中有五种是基本数据类型,还有一种则是引用数据类型.五种基本数据类型分别是:Number 数值类型.String 字符串类型.Boolean 布尔类型, nu ...

  10. golang 数据类型之间的转换

    一.基本数据类型之间的转换 1.string到int int,err:=strconv.Atoi(string) 2.string到int64 int64, err := strconv.ParseI ...

随机推荐

  1. Python学习之三: 编译二进制

    Python学习之三: 编译二进制 摘要 每次使用python 执行py文件其实是比较麻烦的 主要是还得安装python的虚拟机,以及安装对应的pip包. 感觉比较繁杂 理论上最快捷的方式是编译成 二 ...

  2. [转帖]APIServer dry-run and kubectl diff

    https://kubernetes.io/blog/2019/01/14/apiserver-dry-run-and-kubectl-diff/ Monday, January 14, 2019 A ...

  3. Redis7.0 编译安装以及简单创建Cluster测试服务器的方法

    背景 北京时间2022.4.27 晚上九点半左右, Redis 7.0.0 已经GA. 为了进行简单的学习, 这边进行了简单验证工作. 本次主要分为编译, 测试集群搭建,以及springboot进行简 ...

  4. ELK搭建简单说明

    ELK搭建简单说明 简单说明 周天陪孩子学习,自己简单研究了下如何处理 不是很系统,仅是能够展示部分文件的日志. 需要有很多坑需要进行填充. 搭建模式 自己采取rpm包方式进行搭建 183 机器上面安 ...

  5. 【OpenAI】ChatGPT函数调用(Function Calling)实践

    6月13日OpenAI在Chat Completions API中添加了新的函数调用(Function Calling)能力,帮助开发者通过API方式实现类似于ChatGPT插件的数据交互能力. 本文 ...

  6. TienChin 活动管理-活动导出

    ActivityController /** * 导出活动列表 */ @PreAuthorize("hasPermission('tienchin:activity:export')&quo ...

  7. 【JVM】运行时内存分配

    程序计数器 用于标识线程执行到了字节码文件(class文件)的哪一行,当执行native方法时,值为undefined,各个线程私有 Java虚拟机栈 每个线程独有,每个方法执行时会创建一个栈帧,用于 ...

  8. 文档级关系抽取:基于结构先验产生注意力偏差SSAN模型

    文档级关系抽取:基于结构先验产生注意力偏差SSAN模型 Entity Structure Within and Throughout: Modeling Mention Dependencies fo ...

  9. vue + elementui 分页切换页面,缓存页码

    问题场景 列表页面输入查询条件,选择第3页,点击详情进入详情页,从详情页返回时,默认列表页面页码重置为1:此时想要缓存该页码,有两种方式:可按业务场景使用 方式一:用vue自带的 keep-alive ...

  10. C++ GDAL提取多时相遥感影像中像素随时间变化的数值数组

      本文介绍基于C++语言GDAL库,批量读取大量栅格遥感影像文件,并生成各像元数值的时间序列数组的方法.   首先,我们来明确一下本文所需实现的需求.现在有一个文件夹,其中包含了很多不同格式的文件, ...