##小例子
>>> a = [1, 2, 'a']
>>> b = a
>>> a
[1, 2, 'a']
>>> b
[1, 2, 'a']
>>> a.append('b')
>>> a
[1, 2, 'a', 'b']
>>> b
[1, 2, 'a', 'b']
可以看出,赋值号“=”是引用,即a 和 b 是指向一个对象。
如何实现对象的拷贝呢,python 有 copy模块。
##用法
import copy
对象2 = copy.copy(对象1)
##例子
>>> a = [1, 2, 'a']
>>> b = copy.copy(a)
>>> a
[1, 2, 'a']
>>> b
[1, 2, 'a']
>>> a.append('b')
>>> a
[1, 2, 'a', 'b']
>>> b
[1, 2, 'a']
##问题
>>> a = [[1, 2], ['a', 'b']]
>>> b = copy.copy(a)
>>> a
[[1, 2], ['a', 'b']]
>>> b
[[1, 2], ['a', 'b']]
>>> a[1].append('c')
>>> a
[[1, 2], ['a', 'b', 'c']]
>>> b
[[1, 2], ['a', 'b', 'c']]
>>> a.append((3,4,5))
>>> a
[[1, 2], ['a', 'b', 'c'], (3, 4, 5)]
>>> b
[[1, 2], ['a', 'b', 'c']]
可以看出:copy 可以实现浅层拷贝,可以通过copy.deepcoppy()来实现深层拷贝。
##深拷贝
>>> a = [[1, 2], ['a', 'b']]
>>> b = copy.deepcopy(a)
>>> a
[[1, 2], ['a', 'b']]
>>> b
[[1, 2], ['a', 'b']]
>>> a[1].append('hello')
>>> a
[[1, 2], ['a', 'b', 'hello']]
>>> b
[[1, 2], ['a', 'b']]
##对象三要素
python中的对象包含三要素:id, type, value
- id 用来标识唯一一个对象
- type标识对象的类型
- value用来设置对象的值。
is
判断是否是一个对象,是使用id来判断的。
==
是判断a对象的值是否是b对象的值,默认调用它的__eq__
方法。
###例子
>>> a = [1, 2, 'a']
>>> b = a
>>> c = copy.copy(a)
>>> a is b
True
>>> a is c
False
"b = a"
是引用 指向的一个对象,所以a is b
返回 True
"c = copy.copy(a)"
c是a的拷贝,不是指向一个对象,返回False
>>> a == c
True
但是他们的值确实是相同的