主要理解新与旧究竟在哪里 这样也就理解了 深浅拷贝
先说说赋值,事实上python中的赋值事实上是赋值了一个引用。比如:
foo1=1.0
foo2=foo1
用操作符is推断时。你能够发现结果是true。是由于python是先创建了一个对象1.0,然后这个对象的引用又被赋值给了foo1和foo2,可是假设是这样:
foo1=1.0
foo2=1.0
这时你会发现。这事实上是创建了两个不同的对象。用内建函数id()能够发现,二者的身份不同。
事实上python另一个特例,比如:
a=1
b=1
你会发现id(a)=id(b),原因是python觉得这些小整型是会经经常使用到的,所以python会缓存一部分小整型。
其次再说说浅拷贝和深拷贝。
序列类型的能够通过三种方式实现浅拷贝,浅拷贝也是默认的拷贝类型:(1)全然切片操作;(2)利用工厂函数。比方list()等;(3)使用copy模块中的copy()函数。然而对于非容器类型没有拷贝这这一说。在《python核心编程》一书中说道,“对一个对象进行浅拷贝事实上是新创建了一个类型跟原对象一样。其内容是原来对象元素的引用,换句话说。这个拷贝的对象本身是新的。可是它的内容不是”读完这句话我的理解是浅拷贝事实上是赋值,但后来发现不然,由于赋值的结果是他们的身份同样。可是浅拷贝的身份却不同,以下我结合书上的样例以及我自己的想法来说明这句话是什么意思。
fanwei@ubuntu:~$ python
Python 2.6.5 (r265:79063, Apr 16 2010, 13:09:56)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> person=['name',['saveing',100]]
>>> wife=person[:]
>>> hubb=list(person)
>>> id(person)
3078619916L
>>> id(wife)
3078621548L
>>> id(hubb)
3078621996L