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中的可变序列对象,切片操作会创建新的对象
- python-关于对象
- 关于python中的面向对象
- 关于Python中面向对象
- 关于Python类与对象
- python--关于对象的可变性
- 关于Python的面向对象概念
- 关于python——面向对象开发
- 关于Python中的不可变对象
- 【转】关于python中的类和对象
- 关于python面向对象编程(一)
- 有趣的python:关于python中的整数类型对象
- 关于Python的列表append()返回None对象
- 关于python中对象复制和应用的问题
- 关于python数组对象“=”的小陷阱
- 关于Python类对象如何实现的反向迭代
- python 面向对象 关于init方法和del方法
- 关于Python中class的理解之万物皆对象
- python学习之路——函数关于可变对象和不可变对象问题
- 剑指offer-24.二叉树中和为某一值的路径
- Linux静默安装Nginx
- java.lang.Exception: No tests found matching
- mongodb分片
- 详解kmalloc、vmalloc
- python-关于对象
- js获取可视化区域的宽和高以及滑动条距离顶部的距离
- 在线压缩图片
- Android bitmap图片处理
- while和do while
- C++内存地址分配简介
- Eclipse导入外部项目问题总结1
- C二级辅导-质数因子
- HDU 2000 ASC码排序 水题中的水题