python引用、浅拷贝、深拷贝

# -*- coding: utf-8 -*-

"""对象赋值与copy
Python中的对象之间赋值时是按引用传递的,如果需要拷贝对象,需要使用标准库中的copy模块
copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象
copy.deepcopy 深拷贝 拷贝对象及其子对象
"""
import copy

a = [1, 2, 3,[4, 5]] # 原始对象

b = a # 赋值, 传引用
c = copy.copy(a) # 对象浅copy, 只copy父对象, 不copy父对象嵌套的子对象
d = copy.deepcopy(a) # 深copy

# 现在改变a 父对象和嵌套的子对象
a[0] = 100
a[3][0] = 400

print "a =", a
print "b =", b
print "c =", c
print "d =", d

"""result:
a = [100, 2, 3, [400, 5]]
b = [100, 2, 3, [400, 5]]   引用即a别名,所以跟着a变
c = [1, 2, 3, [400, 5]]     浅copy,外层已经重新分配空间了,内层还是引用
d = [1, 2, 3, [4, 5]]       深copy
"""

你可能感兴趣的:(python,copy)