动态类型详解

#-*-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 = 1
y = 1
if x is y:  #x和y是同一个对象
    print id(x), id(y) #42896512 42896512

s = "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 = 3
b = 'spam'
b = 1.33
print "b=", b #表面上是b变成了不同类型的数据,
实质是变量b引用了不同类型的对象

"""
五、共享引用:多变量名引用同一个对象
"""
#1、不可变对象的共享引用
c = 3
d = c
"""
内部结构图:
变量名    引用           对象
 c       .               
         .              3
 d       .
 变量a、b指向同一个对象  
"""
print c is d  #True

c = "Hello!"
print c, d #Hello! 3

#2、可变对象的引用,可本地修改变量的值
L1 = [1, 2, 3]
L2 = L1
L1[0] = 100
print L1,L2 #[100, 2, 3] [100, 2, 3]
print L1 is L2 #True
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值