Python学习记录(4)

来源:互联网 发布:淘宝店铺数据分析表格 编辑:程序博客网 时间:2024/05/20 03:42
动态类型简介
一, 缺少类型声明语句:
Python中,类型是在运行过程中自动决定,而不是代码声明。这一关系对变量、对象及他们之间的关系都适用。
二, 变量、对象和引用
变量创建:一个变量,例如a ,当代码在赋值是创建他。可以理解成最初的赋值创建变量。
变量使用:变量使用时,会立即被当前引用对象代替,无论这个对象是什么类型。所有变量再其使用前必须明确赋值。
>>>a=3
1) 创建一个对象代表3
2) 创建一个变量a
3) 将变量与对象3连接。
由此可得:
1) 变量是系统表的元素,拥有指向对象连接的空间
2) 对象是分配一块内存,有足够空间去表示他们代表的值
3) 引用是自动形成的变量到对象的指针。

实际上对象有更复杂的结构。每一个对象有两个标准头部信息:一个类型标识符去标识这个对象的类型,一个引用计数器,决定是否回收对象。

三, 类型属于对象,而不是变量
1) Python变量名是没有类型的。在同一个python程序中,变量可以引用多种类型的对象。
2) Python类型是属于对象的。对象的两个头部信息中的一个标记着对象类型。
3) 类型与对象相关联,而不是和变量关联。

四, 对象的垃圾收集
1) Python垃圾收集主要基于引用计数法。当对象引用计数器为0时,系统会自动回收。
2) 对象可能自己引用自己。到时计数器不为0,序特殊对待。

五, 共享引用
1)两个变量指向同一个对象。A=3,b=a

3) 如果在此基础上执行了 a=’spam’



4)那么如果执行a=a+3呢?结果会对b造成影响吗?
实际上并不会,因为整数是不可变对象,5是表达式+的结果。会创建一个6对象。

总结:在python中,变量总是指向对象的指针,而不是可改变内存区域的标签。给一个变量赋新值,只会让这个变量去引用完全不同的对象。

六, 共享引用和在原处修改
1)可修改的对象在操作时会在原处改变对象。包括列表、字典以及一些class语句定义的对象。例如:

2)这种行为是默认的。如果想要避免,应当拷贝对象,例如:L2=L1.copy(),或者Import copy。
七,共享引用和相等:
处于完整考虑。一些类型需要更多的思考。

在这里22并没有被回收,他会保存在一个系统表中,等待下次代码生成另一个42来重复利用。其实,大多数对象都会在不在引用时马上回收,对于那些不会被回收的,缓存机制与代码没有什么关系。
1) 由于python引用模型,在python中有两种方式去检查是否相等。第一种是==操作符,测试两个对象是否拥有相同的值,第二种是is操作符,检查对象同一性。两个变量名精确指向同一个对象,他会返回True。例如:

但是我们对数字采用同样操作时:

2) 详细查看python对象被引用次数,可以使用sys模块中的getrefcount。
Import sys;sys.getrefcount(对象)

原创粉丝点击