python-关于对象

来源:互联网 发布:java rsa加密算法 编辑:程序博客网 时间:2024/06/08 03:31

开章明义:Python 一切皆对象

你所见到的函数 变量 类 实例 模块 甚至文件皆对象

在其他面向对象语言中,例如Java,c++,c#等,对象意味着它必须有数据域和方法,对象总是和类出现在一起,类是创建对象的模板,创建对象的过程称之为类的实例化。
然而,Python中 对象的定义并不是很严格,对象可以没有方法,也可以没有属性。

Python中的一切都可以赋值给变量,都可以作为参数传递给函数。
这其中有一个名称和对象的映射关系,官方术语:绑定,对象的内存管理采用了自动引用计数计数,俗称ARC。内存管理不需要程序员操心

对象三个特性:id值<对象唯一的身份标识,不同对象不会相同> ;类型<使用内建函数type查看> ;对象的值

对象有可变对象和不可变对象之分,常见的数值类型对象如整形、浮点型、字符串、复数、元组、不变集合等不可变
可变对象如:列表、字典、可变集合、可变字节数组等

语句a=1 执行如下过程:创建一个整形对象,创建变量a,将整形对象的引用赋值给a
>>>a=1
>>>b=1
>>>c=b
>>>id(a)--->4297554880
>>>id(b)---->4297554880
>>>id(c)----->4297554880
结论:创建等值的不可变整形对象,系统只会创建一个,后续变量只是对前面对象的引用,修改变量的值<准确的说是修改变量的引用>,也就是创建新的对象 的过程

再看下面的例子:
>>>a=(1,2,3)
>>>b=(1,2,3)
>>>id(a)-->4321240048
>>>id(b)-->4321240264
>>>c=a
>>>id(c)--->4321240048
同样是创建不可变对象,元组和整形表现完全不同

不可变序列的切片操作
a=(1,2,3)
b=a[:] 我们把它复制下来
id(a)--->4330677232
id(b)--->4330677232
并没有创建新的对象

下面是可变序列对象的创建
>>>a=[1,2,3]
>>>b=[1,2,3]
>>>id(a)--->4330637384
>>>id(b)--->4330637640
>>>c=a[:]
>>>id(c)--->4330674824
我们看到,创建可变序列对象时,序列对象每个元素值相同对象也不会相同,采用切片操作会得到全新的对象.

需要注意的是切片拷贝操作是浅拷贝,可以自己验证下
不可变序列不支持部分切片拷贝操作

结论如下:
1 Python中的单值对象,不可变,值若相同,不会创建新的对象,节省内存
2 Python中的不可变序列对象,序列中即使每个元素值相同,但对象仍不同,创建时会创建新的对象,一旦创建,对象不可变,切片赋值不会创建新对象,并且不支持部分切片
3 Python中的可变序列对象,切片操作会创建新的对象

0 0
原创粉丝点击