python记录 --数据类型(只是查看资料后,自己的理解,若有不对,请告知,可能有点其它人的东西和链接,若不允许,请告知)

七个标准的数据类型:

 •   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后,,,,)

                                            答案:python有自己的内存管理机智,一般是不需要关心它分配的地址是多少吧,python解释器对与数字有个小数字的缓存池:-5~256,也就是超过256id就不一样了

疑问2:当创建一个值,会分配一个内存空间。

   资料参考:https://www.cnblogs.com/dadadechengzi/p/6245173.html

                               问题1:为什么我的电脑和别人的电脑分配的内存不同,是电脑内存大小的不同,?是否有函数控制?

 

 

 

             

posted @ 2018-05-07 17:06  游徒  阅读(249)  评论(0编辑  收藏  举报