#-*-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
动态类型详解
最新推荐文章于 2022-08-15 15:01:15 发布