Python中的直接赋值、浅拷贝、深拷贝

先看一段程序

import copy


a = [1, 2, 3]
b = [1, 2, 3, a]        # [1, 2, 3, [1, 2, 3]]

x = b                   # 直接赋值
y = b.copy()            # 浅拷贝
z = copy.deepcopy(b)    # 深拷贝

# 先对b做直接修改
b.append(111)
print("x: %s" % x, "y: %s" % y, "z: %s" % z, sep="\n")
# x: [1, 2, 3, [1, 2, 3], 111]
# y: [1, 2, 3, [1, 2, 3]]
# z: [1, 2, 3, [1, 2, 3]]

# 再对b内的子对象a做修改
a.append(125)
print("x: %s" % x, "y: %s" % y, "z: %s" % z, sep="\n")
# x: [1, 2, 3, [1, 2, 3, 125], 111]
# y: [1, 2, 3, [1, 2, 3, 125]]
# z: [1, 2, 3, [1, 2, 3]]

直接赋值

在python中,对象赋值实际上是对象的引用。当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用,实际上指向的还是同一个对象

浅拷贝

拷贝父对象,但不会拷贝对象内部的子对象,也就是只复制可变对象b本身,内部的可变对象a还指向同一个

深拷贝

会在内存中复制出一个新的对象

你可能感兴趣的:(Python中的直接赋值、浅拷贝、深拷贝)