七个标准的数据类型:
• Numbers(数字)
• String(字符串)
• List(列表)
• Tuple(元组)
• Dictionary(字典)
• set(集合)
• Bool(布尔)
数字(Numbers)
特征:
1. 数字是不可改变的数据类型,这意味着改变数字数据类型会分配一个新的对象。
2.当变量值进行变更时,会自动重新分配一个内存空间地址,并且自动释放变更前的内存地址。
四种不同的数字类型:
int(有符号整型):通常被称为是整型或整数,是正或负整数,不带小数点。
long(长整型[也可以代表八进制和十六进制]):无限大小的整数,整数最后是一个大写或小写的L。
float(浮点型):浮点型由整数部分与小数部分组成,浮点型也可以使用科学计数法表示(2.5e2 = 2.5 x 102 = 250)
complex(复数):复数由实数部分和虚数部分构成,可以用a + bj,或者complex(a,b)表示, 复数的实部a和虚部b都是浮点型。
字符串(String)
1.字符串是以单引号'或双引号"括起来的任意文本
2. 字符串有两种数据类型:str类型和unicode类型。str类型采用的ASCII编码,也就是说它无法表示中文。unicode类型采用unicode编码,能够表示任意字符,包括中文及其它语言
3. Python2的 默认编码 是ASCII,不能识别中文字符,需要显式指定字符编码;Python3的 默认编码 为Unicode,可以识别中文字符。
4. ASCII编码适用英文字符,Unicode适用于非英文字符(例如中文、韩文等),而utf-8则是一种储存和传送的格式,是对Uncode字符的再编码。所以我们在编码时需注明:#-*- coding: utf-8 -*-
列表(list)
1. 列表是一种可修改的集合类型,其元素可以是数字、string等基本类型,也可以是列表、元组、字典等集合对象,甚至可以是自定义的类型
2. 它是一种有序的集合,为 每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推
资料:
分片,列表支持的公共方法,列表转换为迭代器:https://www.cnblogs.com/fengzheng/p/3590891.html
更新,删除,列表函数\方法:
http://www.runoob.com/python/python-lists.html
元组(Tuple)
1. 元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可
2.元祖只有一个值时需添加(,)逗号。列如:t=(1,)
字典(Dictionary)
1. 字典是无序的,通过key访问
2. 使用键-值(key-value)存储,具有极快的查找速度
3. 键必须唯一,
资料:
https://www.cnblogs.com/scios/p/8108243.html
https://blog.csdn.net/qq_15654993/article/details/75267569
集合(set)
1.Set是一个无序不重复元素集,与列表和元组不同,集合是无序的,无法通过数字进行索引
2. 基本功能包括关系测试(运算)和消除重复元素. 集合对象还支持并、交、差、对称差等
3. 注意在创建空集合的时候只能使用s=set(),因为s={}创建的是空字典
4.创建不为空的集合时,使用{}
资料:
集合类型的操作:https://blog.csdn.net/business122/article/details/7541486
https://blog.csdn.net/u013291394/article/details/50371760
https://www.cnblogs.com/whatisfantasy/p/5956775.html
布尔(Bool)
1. 应用:做逻辑判断
2. 布尔类型只有True和False两种值
资料:
http://www.iplaypy.com/python-100/20541.html
https://www.cnblogs.com/fengzheng/p/3590891.html
https://www.cnblogs.com/chenwolong/p/6496672.html
https://www.cnblogs.com/snaildev/archive/2017/09/18/7544558.html
专业术语:
可变类型与不可变类型
可变类型:列表,字典,集合
具体解释: 如果是可变类型,对对象操作的时候,不需要再在其他地方申请内存,只需要在此对象后面连续申请(+/-)即可,也就是它的address会保持不变,但区域会变长或者变短。在内存中插入数据,也就是内存地址不变,值变。
不可变类型:数字,字符串,元组
具体解释: 在对对象本身操作的时候,必须在内存中新申请一块区域(因为老区域#不可变#)。不可变的意思是地址的内存空间中的值不进行不变动,而如果变动值,重新申请地址内存空间。而旧的内存空间,当未使用时,则自动进行垃圾回收。内存地址动,值也动
总结:不可变数据类型,不允许变量的值发生变化,如果改变了变量的值,相当于是新建了一个对象,而对于相同的值的对象,在内存中则只有一个对象,内部会有一个引用计数来记录有多少个变量引用这个对象;
可变数据类型,允许变量的值发生变化,即如果对变量进行append、+=等这种操作后,只是改变了变量的值,而不会新建一个对象,变量引用的对象的地址也不会变化,不过对于相同的值的不同对象,在内存中则会存在不同的对象,即每个对象都有自己的地址,相当于内存中对于同值的对象保存了多份,这里不存在引用计数,是实实在在的对象
参考资料:可变与不可变https://blog.csdn.net/dan15188387481/article/details/49864613
引用计数:
某个引用作为参数,传递给getrefcount()时,参数实际上创建了一个临时的引用。因此,getrefcount()所得到的结果,会比期望的多1
参考资料:引用计数,对象,垃圾回收,引用环,分代回收https://www.cnblogs.com/vamei/p/3232088.html
内存分配:无 ,未找到资料,也很迷茫
疑问:
1.不可变类型疑问:
代码:
疑问1:当创建一个内存值时,再次引用时,内存地址相同
问题1:为什么内存地址不同?我看到一条答案是,当数值太大时内存地址会变,
问题2:如果如上述问题所说,那么数值太大是多少呢?(100后,200后,,,,)
疑问2:当创建一个值,会分配一个内存空间。
问题1:那么这个分配内存空间的规则呢。我看到有些变量内存空间大,有些变量内存空间小?