您的位置:首页 > 编程语言 > Python开发

Python学习记录(4)

2017-10-20 11:25 183 查看
动态类型简介
一, 缺少类型声明语句:

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(对象)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: