标签:
>>> a = 1 >>> b = 1 >>> id(a) 15106392 >>> id(b) 15106392 id(a) = id(b) >>> a = [1] >>> b=[1] >>> id(a) 140657598496424 >>> id(b) 140657598578128 id(a) != id(b) >>> a= b >>> id(a) 140657598496424 >>> id(b) 140657598578128 id(a)=id(b)
1.浅拷贝(copy()):对对象进行拷贝,并生成新的对象,但对象中的元素只会使用原始对象中的引用
>>> d=copy.copy(a) >>> a.append(8) >>> a,d ([1, 2, 4, 5, 6, [‘a‘, ‘b‘, ‘c‘], 7, 8], [1, 2, 4, 5, 6, [‘a‘, ‘b‘, ‘c‘], 7]) >>> a[5].append(‘d‘) >>> a,d ([1, 2, 4, 5, 6, [‘a‘, ‘b‘, ‘c‘, ‘d‘], 7, 8], [1, 2, 4, 5, 6, [‘a‘, ‘b‘, ‘c‘, ‘d‘], 7])
2.深拷贝(deepcopy()):会生成一个新对象,对象中的元素也会重新生产成一份
>>> a=[1,2,[1,2]] >>> d=copy.deepcopy(a) >>> a.append(3) >>> a,d ([1, 2, [1, 2], 3], [1, 2, [1, 2]]) >>> a[2].append(3) >>> a,d ([1, 2, [1, 2, 3], 3], [1, 2, [1, 2]])
*对于非容器类型没有拷贝这一说法
*对于元组变量中只包含原子类型的元素不能进行深拷贝
知识补充:
内存模型
依据变量在内存中的组织分类。Python的类型, 就象绝大多数其它语言一样,能容纳一个或多个值。一个能保存单个字面对象的类型我们称它为原子或标量存储,那些可容纳多个对象的类型,我们称之为容器存储。(容器对象有时会在文档中被称为复合对象,不过这些对象并不仅仅指类型,还包括类似类实例这样的对象)
分类 Python 类型 标量/原子类型 数值(所有的数值类型),字符串(全部是文字) 容器类型 列表、元组、字典
标签:
原文地址:http://www.cnblogs.com/ChaserChen/p/4823867.html