动态类型详解

来源:互联网 发布:播放类软件 编辑:程序博客网 时间:2024/06/05 12:38
#-*-coding:utf-8-*-'''Created on 2016年3月27日@author: Zroad'''#动态类型:类型是在运行过程中自动决定的,而不是通过代码声明"""一、动态语言赋值的操作过程,以 a = 3为例,分三步完成:1、创建一个对象来代表值3。2、创建一个变量a,如果它还未创建的话3、将变量与新的对象3连接起来""""""二、关于变量、引用、与对象a=3实现过程中的Python内部结构图及其解析:运行a=3后,变量a变成对象3的一个引用。变量名        引用                 对象         .a       .       3        .1、关于变量:变量事实上是到对象内存空间的一个指针;是一个系统表的元素,拥有指向对象的连接的空间。2、关于引用:从变量到对象的连接称作引用,引用是一种关系,以内存中的指针的形式存在;是自动形成的从变量到对象的指针。3、关于对象:是分配到一块内存,有足够的空间去表示它们所代表的值。""""""三、关于不变对象:1、从内部来看作为一种优化,python缓存了不变的对象并对其进行复用。2、不变的对象包括小的整数和字符串等"""x = 1y = 1if x is y:  #x和y是同一个对象    print id(x), id(y) #42896512 42896512s = "ello,python"s1 = "hello,python"if s is s1:  #s和s1是同一个对象    print id(s), id(s1)"""四、类型与对象、变量1、类型与对象、变量的关系:1)类型属于对象,而不是变量。2)python的变量就是在特定的时间引用了一个特定的对象3)对象知道自己的类型,每个对象都包含了一个头部信息,其中标记了这个对象的类型2、对象的内部结构:1)对象由三部分组成: 类型|计数器|值2)头部信息:一个是类型标志符,另一个是引用计数器3)计数器及其回收:每个对象中保持了一个计数器,计数器记录了当前指向该对象的引用的数目,这个计数器被设置为零,这个对象的内存空间就会自动回收。"""b = 3b = 'spam'b = 1.33print "b=", b #表面上是b变成了不同类型的数据,实质是变量b引用了不同类型的对象"""五、共享引用:多变量名引用同一个对象"""#1、不可变对象的共享引用c = 3d = c"""内部结构图:变量名    引用           对象 c       .                        .              3 d       . 变量a、b指向同一个对象  """print c is d  #Truec = "Hello!"print c, d #Hello! 3#2、可变对象的引用,可本地修改变量的值L1 = [1, 2, 3]L2 = L1L1[0] = 100print L1,L2 #[100, 2, 3] [100, 2, 3]print L1 is L2 #True
0 0
原创粉丝点击