1.对象的身份、类型、值

(1)身份:对象在内存中位置的指针,地址值,

>>> a = [1,2,3,4,5]

>>> id(a)
48497328

>>> id(a[0])
37465112
>>> id(a[1])
37465100
>>> id(a[2])
37465088
>>> id(a[3])
37465076
>>> id(a[4])
37465064

(2)类型

>>> a = [1,2,3,4,5]

>>> type(a)
<type 'list'>
>>> type(a[1])
<type 'int'>

isinstance:

>>> isinstance(a,list)
True

(3)值

print看

2.引用计数和垃圾回收

(1)引用计数

a = [1,2,3,4,5] #创建list对象,a是list对象的引用

b = a #list对象的引用加1

del a  #list对象的引用减1

b = 2 #该list对象的引用再减1

可以通过sys.getrefcount() 函数获得对象的引用计数:

>>> import sys
>>> a = [1010,1023,1394]
>>> sys.getrefcount(a)
2
>>> b = a
>>> sys.getrefcount(b)
3
>>> sys.getrefcount(a)
3

(2)垃圾回收

当一个对象的引用计数归零时,将会被垃圾收集回收。

(3)不可变对象的赋值,会创建副本;而可变对象的赋值不会创建副本

不可变对象赋值:

>>> a = 20
>>> b = a
>>> b is a
True
>>> b = 30
>>> a
20

可变对象赋值:

>>> a = [1,2,3,[4,5]]
>>> b = a
>>> b is a
True
>>> b[0] = 10
>>> b
[10, 2, 3, [4, 5]]
>>> a
[10, 2, 3, [4, 5]]

list的反向遍历:

for i in lista[::-1]

通过引用修改对象,该对象的其他引用也会被修改:

>>> import sys
>>> a = [1010,1023,1394]
>>> sys.getrefcount(a)
2
>>> b = a
>>> sys.getrefcount(b)
3
>>> sys.getrefcount(a)
3
>>> b[1] = 99999
>>> b
[1010, 99999, 1394]
>>> a
[1010, 99999, 1394]
>>> b is a

(4)list、dict的浅拷贝和深拷贝:

浅拷贝将创建一个新对象,对象的元素是原对象元素的引用。

>>> a = [1,2,3,[4,5]]
>>> b = list(a)
>>> b is a
False
>>> b[1] = 1000
>>> b
[1, 1000, 3, [4, 5]]
>>> a
[1, 2, 3, [4, 5]]

>>> b[3][1] = 9999
>>> b
[1, 1000, 3, [4, 9999]]
>>> a
[1, 2, 3, [4, 9999]]

深拷贝:创建一个新对象,对象的元素也是新建的对象,而不是原对象元素的引用。通过b = copy.deepcopy(a)实现:

>>> a = [1, 2, 3, [4, 9999]]
>>> import copy
>>> b = copy.deepcopy(a)
>>> b[3][0] = 100000
>>> b
[1, 2, 3, [100000, 9999]]
>>> a
[1, 2, 3, [4, 9999]]

3.第一类对象

>>> items = dict()
>>> items['func'] = abs
>>> import math
>>> items['module'] = math
>>> items['func'](-9)
9
>>> items['module'].sqrt(4)
2.0

4.字符串

(1)format()

>>> a = "your name is {0}, and age is {1}"
>>> a.format('Jack',25)
'your name is Jack, and age is 25'

5.集合

(1)set

可变集合

(2)frozenset

不可变集合

6.绑定方法及非绑定方法

(1)绑定方法

调用时需要为self传参

(2)非绑定方法

不用为self传参

7.常用属性

(1)函数的常用属性

f.__doc__

f.__name__

f.__code__

f.__dict__

f.__defaults__

f.__globals__

f.__closure__

(2)类的常用属性

t.__doc__

t.__name__

t.__bases__

t.__dict__

t.__module__

(3)模块的常用属性

m.__doc__

m.__name__

m.__file__

m.__dict__

m.__path__

8.解释器内置对象类型

(1)代码对象:编译之后的可执行的字节码,compile()返回

(2)帧对象:表示执行帧,多出现在跟踪对象中。

(3)跟踪对象:出现异常时会创建跟踪对象,包含栈跟踪信息(可通过sys.exc_info()获取)

(4)生成器对象:包含yield

(5)切片对象:序列等进行切片操作时使用

(6)Ellipsis对象:用于表示索引操作[]中省略号(...)是否存在。

9.对象的创建、初始化、销毁

(1)创建:__new__()

(2)初始化:__init__()

(3)销毁:__del__()

通常new、del在元类中有定义,用户自定义类继承就可以,如果要销毁时关闭连接或者锁,可以重写del函数。

a = A(args)  #先调用了__new__(),然后判断isinstance(a,A),再调用__init__()  

10.repr、eval

(1)repr:返回一个表达式字符串

(2)eval:执行该表达式字符串

10.迭代

>>> a = [1,2,3,7,8,9,32,45,87]
>>> b = a.__iter__()
>>> while True:
try:
print b.next()
except StopIteration:
break

1
2
3
7
8
9
32
45
87

 

python参考手册--第3章类型和对象的更多相关文章

  1. python参考手册--第1章python简介

    1.if __name__ == '__main__': 直接运行myModel.py时,当前模块的名字是main:import myModel然后运行的时候当前模块的名字是myModel. 2.ev ...

  2. python参考手册--第9章

    1.读取命令行选项 (1)sys.args python启动时,命令行选项设置在列表sys.args中. sys.args[0]:xxx.py sys.args[1:]: 其他参数 (2)optpar ...

  3. python参考手册--第8章

    1.模块和import (1)首次import module会做以下3件事: a)创建新的命名空间,用作在该源文件中定义的所有对象的容器.在模块中定义的函数和方法在使用global语句时将访问该命名空 ...

  4. python参考手册--第2章词汇和语法约定

    1.续行符\ 三引号.().{}.[]中的内容不需要续行符 2.空格缩进 优选空格作为缩进,不要用tab,这是因为不同操作系统下tab对应的空格不一样,而python是通过严格的空格来控制语句块的. ...

  5. 《python参考手册(第四版)》【PDF】下载

    <python参考手册(第四版)>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382222 内容介绍 本书是权威的Python语 ...

  6. [python学习手册-笔记]003.数值类型

    003.数值类型 ❝ 本系列文章是我个人学习<python学习手册(第五版)>的学习笔记,其中大部分内容为该书的总结和个人理解,小部分内容为相关知识点的扩展. 非商业用途转载请注明作者和出 ...

  7. [python学习手册-笔记]004.动态类型

    004.动态类型 ❝ 本系列文章是我个人学习<python学习手册(第五版)>的学习笔记,其中大部分内容为该书的总结和个人理解,小部分内容为相关知识点的扩展. 非商业用途转载请注明作者和出 ...

  8. JavaScript 参考手册——javascript本地和内置对象、BOM、DOM

    本部分提供完整的 JavaScript 参考手册: JavaScript 本地对象和内置对象 Browser 对象(BOM) HTML DOM 对象 JavaScript 对象参考手册 本参考手册描述 ...

  9. python参考手册--第4、5、6、7章

    1.zip zip(s,t):将序列组合为一个元组序列[(s[0],t[0]), (s[1],t[1]), (s[2],t[2]), (s[3],t[3]),...] >>> s = ...

随机推荐

  1. C# winform滚动字幕

    private void timer1_Tick(object sender, EventArgs e)//用Timer来控制滚动速度 { label1.Left -= 2;//设置label1左边缘 ...

  2. .NET中开源CMS目录

    提起开源cms,大家第一想到的是php的cms,因为php开源的最早,也最为用户和站长们认可,随着各大cms系统的功能的不断完善和各式各样的开源cms的出现,.net和java的高端的cms系统也逐渐 ...

  3. Ubuntu、Sql Server卸载心得

    这几天真是搞得亏大了! 首先是卸载Ubuntu,直接在Windows下格式化那个盘了,这就出岔子了……然后越来越糟糕,最后弄得一个系统都没有了……然后重装系统…… 然后装VS和Sql Server,因 ...

  4. qml实现窗口拖动

    在去掉窗口标题栏后窗口会失去鼠标拖动效果,所以需要自己添加拖动效果. 实现代码: ApplicationWindow {     id: mainWindow     visible: true    ...

  5. HTML5 Video(视频)

    HTML5 Video(视频) 很多站点都会使用到视频. HTML5 提供了展示视频的标准. 检测您的浏览器是否支持 HTML5 视频: 检测 Web站点上的视频 直到现在,仍然不存在一项旨在网页上显 ...

  6. 正则应用—queryURLParameter()

    在项目中,我们做详情页的时候,需要获取到用户从哪里来点击进来,获取到用户的点击地址,根据不同的地址传进的参数向服务器获取不同的数据,然后加载不同的详情页面. 大部分企业都采用字符串截取的方式,quer ...

  7. linux下挂载移动硬盘ntfs格式

    http://jingyan.baidu.com/article/f96699bba93dce894e3c1bec.html fdisk -l安装后 使用命令mount -t ntfs-3g /dev ...

  8. JAVA对象是如何占用内存的

      本文使用的是32位的JVM ,jdk1.6.本文基本是翻译的,加上了一些自己的理解,原文见文章底下链接.     在本文中,我们讨论如何计算或者估计一个JAVA对象占多少内存空间.(注意,使用 C ...

  9. php连接ftp

    PHP连接ftp,发现一个很好用的类库phpseclib.英文原文 Connecting to SFTP with PHP If you need to connect to SFTP using P ...

  10. Spark机器学习 Day2 快速理解机器学习

    Spark机器学习 Day2 快速理解机器学习 有两个问题: 机器学习到底是什么. 大数据机器学习到底是什么. 机器学习到底是什么 人正常思维的过程是根据历史经验得出一定的规律,然后在当前情况下根据这 ...