python3数据模型
对象, 值和类型
对象是 Python 的抽象数据类型, 所有的数据在 Python 程序中都表示为对象和对象之间的关系.
每个对象都有一个唯一标识数字ID, 一个类型和一个值. 当一个对象被创建后, 它的标识就固定下来,不会改变. 我们可以认为ID是对象在内存中的地址. Python的is
操作符就是比较的这个ID(比如: a is b
), 如果我们想得到这个ID可以使用内建函数id()
, 如:id(a)
, 查看16进制可以使用hex(id(a))
在CPython中, id(a)
就是a
的内存地址
查看对象的类型使用type(a)
容器 container, 可变性 mutability
容器可以包含对其他多个对象的应用. 比如list, tuple
等. 有些容器的不可变的, 比如 tuple
, 可变的比如 list
, 对于tuple, 如果他内部引用了可变的对象, 那么, 我们改变这个可变的对象, tuple的值也会变. 但tuple无法增加减少元素.
In [11]: a =[1,2,4]
In [12]: b=[3,4,5]
In [13]: c=a,b,
In [14]: c
Out[14]: ([1, 2, 4], [3, 4, 5])
In [15]: a.append(5)
In [16]: c
Out[16]: ([1, 2, 4, 5], [3, 4, 5])
可变 mutable , 不可变 immutable
对于不可变的类型(例如int): 执行代码
a=1;b=1
现在
id(a)有可能等于id(b), 也可能不等于.对于可变的的类型(例如list): 执行代码
c=[];d=[]
那么c和d一定是2个不同的list, 各自有独立的内存空间.
标准库中的类型
Ellipsis
>>> ...
Ellipsis
这个Ellipsis
也可以写成...
, Ellipsis
类型只有一个示例就是Ellipsis
, 可以用来作为函数的返回值. 类似 “nop” 一样的占位符. 替代 pass
def will_do_something():
...
不可变序列 Immutable sequences
str()
tuple()
bytes()
可变序列 Mutable sequences
list()
bytearray()
array模块
集合类型
Sets (mutable set)
set()
Frozen sets (immutable set)
frozenset()
字典
dict
collections模块
OrderedDict
defaultdict
ChainMap
模块
m.x
等于m.__dict__['x']
使用模块的m.__dict__
时要注意, 如果模块不在可访问的范围, 那么就算有引用指向了模块的__dict__
, 这个__dict__
也会被清空.
I/O对象(也叫文件对象)
一个文件对象代表着一个打开的文件或者套接字, 并有一个文件描述符fd
与这个打开的文件对应. 我们打开一个磁盘文件可以使用open()
内建函数. socket.makefile()
函数用来打开一个套接字.
《数据科学与人工智能》公众号推荐朋友们学习和使用Python语言,需要加入Python语言群的,请扫码加我个人微信,备注【姓名-Python群】,我诚邀你入群,大家学习和分享。