chapter 4
1.python对象:所有的python对象都有三个特性:身份、类型和值
身份:每一个对象都有一个唯一的身份标识自己,任何对象的身份都可以使用内建函数id()来得到。这个值可以被认为是该对象的内存地址。
类型:对象的类型决定了该对象可以保存什么类型的值。可以用内建函数type()查看对象的类型,type返回的是对象。
值:对象表示的数据项
2.对象属性:某些python对象有属性、值或相关联的可执行代码,比如方法,python用点“.”标记方法来访问属性
3.标准类型:数字、整型、布尔型、长整型、浮点型、复数型、字符串、列表、元组、字典
4.其他内建类型:类型、NULL对象、文件、集合/固定集合、函数/方法、模块、类
5.所有类型对象的类型都是type
6.python有一个特殊的类型,被称作Null对象或者NoneType,他只有一个值就是None,他不支持任何运算也没有任何方法,他的布尔值总是False。
7.内部类型:代码、帧、跟踪记录、切片、省略、Xrange
8.对象身份比较:
python不止可以进行值比较,也支持对象本身的比较。对象可以通过引用被赋值到另一个变量,因为每个变量都指向同一个(共享的数据对象),只要任何一个引用发生改变,该对象的其他引用也发生改变。
例1:foo1=foo2=4.3 这两个引用指向同一个对象,如图
即:一个值为4.3的数字对象被创建,然后这个对象的引用被赋值给foo1和foo2,结果就是两者指向同一个对象。即一个对象的两个引用。
例2:foo1=4.3 foo2=foo1
这个与例1类似,都指向同一个对象。
例3:foo1=4.3 foo2=1.3+3.0
该例中:首先一个数字对象被创建,然后赋值给foo1,然后第二个数值对象被创建并赋值给foo2,尽管这两个对象保存的是同样大小的值,但系统中保存的都是两个独立的对象。其中foo1是对第一个对象的引用,foo2这是对第二个对象的引用。
9.python中提供了is 和is not运算符测试两个变量是否指向同一个对象。
a is b 等价于 id(a)==id(b)
标准类型对象身份比较符:
obj1 is obj2 obj1和obj2是同一个对象
obj1 is not obj2 obj1和obj2不是同一个对象
上边的例子中,a和b指向不同的对象,c和d指向同一个对象,这是因为在python中会为每个出现的对象分配内存,哪怕他们的值完全相等(注意是相等不是相同)。如执行a=1.0,b=1.0这两个语句时会先后为2.0这个Float类型对象分配内存,然后将a与b分别指向这两个对象。所以a与b指向的不是同一对象;但是为了提高内存利用效率对于一些简单的对象,如一些数值较小的int对象,python采取重用对象内存的办法,如指向c=1,d=1时,由于1作为简单的int类型且数值小,python不会两次为其分配内存,而是只分配一次,然后将c与d同时指向已分配的对象。
但是在pycharm中,得到的结论与上述不一致,不知道为什么。
9.内建函数
type(object)
type()接受一个对象作为参数,并返回它的类型。它的返回值是一个类型对象。
cmp()
内建函数cmp()用于比较两个对象obj1和obj2,如果obj1小于obj2,则返回一个负整数,如果obj1大于obj2,则返回一个正整数,如果obj1=obj2,则返回0。
str()和repr()及``运算符
str()和repr()及``运算符可以以字符串的形式获取对象的内容、类型、数值属性等信息。str()函数得到的字符串可读性好,repr()函数得到的字符串通常可以用来重新获得该对象。
repr()和``返回的是一个“官方”的字符串表示,可以通过求值运算eval()重新获得该对象,但str()致力于返回一个可读性好的字符串表示,它的返回结果无法用于eval()求值。
10.
isinstance()
isinstance(object, classinfo) :判断实例是否是这个类或者object是变量,其第一个参数为对象,第二个为类型名或类型名的一个列表。其返回值为布尔型。若对象的类型与参数二的类型相同则返回True。若参数二为一个元组,则若对象类型与元组中类型名之一相同即返回True。
11.python运算类型和内建函数总结(优先级从高到低):
string:``
内建函数:cmp()、repr()、str()、type()
值比较:>、<、>=、<=、==、!=
对象比较:is、is not
布尔运算:not、and、or
12、存储模型:
标量/原子 存储:能保存单个字面对象的类型;数值(所有的数值类型),字符串(全部都是文字)
容器存储:能容纳多个对象的类型;列表、元组、字典
13.更新模型
可变类型:列表,字典
不可变类型:数字、字符串、元组
疑问:数字和字符串对象不可改变?例:x=1;x=2;i=0;i=i+1
答:以上的例子中,事实上是一个新的对象被创建,取代了旧对象。新创建的对象被关联到原来的变量名,旧对象被丢弃,垃圾回收器会在适当的时期回收这些对象。
14.访问模型
直接访问:数字
顺序访问:字符串、列表、元组
映射访问:字典
15.总结: