Python创建对象与赋值
来源:互联网 发布:网络优化工程师前景 编辑:程序博客网 时间:2024/06/02 18:18
Python是面向对象的语言,在Python在一切皆为对象。函数、属性都可以作为对象赋值给变量,并且规定参数的传递都是传递对象的引用(传地址)。所以说函数是可以通过赋值给变量的。入python的函数abs
(),通过赋值语句 a=abs;那么下次调用该函数是可以是a(-7)
(一)创建对象
python与C/C++,java等强类型语言不同,在创建对象的时候不需要指定类型。而是通过对象的行为来确定对象的类型,有数字、列表 、元组 、字符串等内置对象
图1
该操作是创建了一个名字叫d的列表
在创建对象的时候是,在内存中创建[1, [1, 2], 3],然后将d指向[1, [1, 2], 3],就是让该对象的地址给d,此时就能通过d访问该对象。
当进行了如下操作
图2
此时d已经不指向[1, [1, 2], 3],那么就不能通过d访问该对象了,假设此时没有任何变量引用该对象。该对象就成为了垃圾对象被Python解释器释放该对象,这种机制就像java的GC(垃圾回收机制)
在上述内置对象中,string字符串是不可变对象,该对象一旦创建就不能改变了跟java里的String类型相似
(二)赋值
Python的赋值和其他的语言赋值是有不同,就如上图1的c=d这条语句,并不是copy d对象然后创建一个新的赋值给c。而是将c指向d指向的对象 既是[1, [1, 2], 3]。如果赋值的时候是创建新的对象给c那么 c和d是两个对象而且是完全没有关系,在c里面加一个数不会影响到d。针对这个问题,我们做一个实验,现在在c里面加一个数看看会怎么样
图3
执行 图3的代码看看结果如何,让我们拭目以待。
图4
结果如图4 c和d的值还是一样说明c在加一个数字4的时候d也跟着加了,说明c和d实际上是引用同一个对象
在测试几次
可以看出切片是将该对象以部分分割给c 让c只指向该对象的一部分
假如我们现在执行如下代码结果会如何?
结果还是会之前一样d会跟着变在后面多一个5吗?
但结果然并卵
在这种情况下c和d最后结果还是分手了(不是指向同一个对象 ps:其实本来就不是c只是引用了对象的部分) 那我们好好探讨为什么这对“恋人”在经历之前那么多磨难这次却分开了,这是为什么呢?
其实这是跟c的改变有关,因为c只是引用了部分的对象当执行c.append(5) 该对象的部分的内部结构就会发生了改变,此时发生改变后,Python就会为c创建新的对象,然后c指向新的对象,此时c和d就没什么关系了。而在第一个例子中的c是应用对象。
总结:
所以我们可以看出c和d指向同一个对象的时候,只要其中一个引用发生了改变那么python就会为该改变创建新的对象。
最后:
第一次写博文流水帐,表达不清望见解,以上的理论也只是我的想法而已,到底实际上是怎么样,我们还要进一步学习 ----python初学者
- Python创建对象与赋值
- Python中的对象赋值与拷贝
- javasript 对象 创建 赋值
- python 赋值 类 对象
- python对象赋值
- Python中的对象赋值、浅拷贝与深拷贝
- 对象赋值与复制
- 比对一下,字符串赋值和实体对象赋值,理解String创建新对象与实体引用
- Python 对象特殊方法:(一)对象创建与销毁
- 对象引用与变量赋值
- PHP对象赋值与克隆
- js创建对象并赋值其属性
- vbo对象的创建和赋值
- 对象的赋值,动态创建属性
- shell与python相互赋值
- 2.5 Python变量与赋值
- python之赋值与拷贝
- 对象的赋值与对象的复制
- Maven搭建Spring+SpringMVC+Mybatis+Shiro项目详解
- A Famous Music Composer
- mac下安装完myeclipse启动tomcat报错解决方法
- 直线Line
- JSON解析之JSONObject与JSONArray的使用
- Python创建对象与赋值
- libevent遇到错误怎么处理
- 装Ubuntu系统黑屏等问题汇总
- MapReduce工作原理讲解
- 自执行函数、map循环、call和apply用法
- RedHat Enterprise Linux 6.4使用Centos 6 的yum源
- Android 测试资源之 GitHub 篇
- Android MediaProjection截屏与录屏(ScreenCapture Library 的使用)(二)
- 三目运算