Python 深拷贝、浅拷贝、切片

切片属于浅拷贝

import copy


>>> a = [1,2,[1,2]]
>>> b = a
>>> c = a[:]
>>> d = copy.copy(a)
>>> e = copy.deepcopy(a)


# 赋值
# 只是把变量a的地址赋值给b,不存在拷贝
>>> id(a)
4539103624
>>> id(b)
4539103624

# 浅拷贝
# 可以看到,切片和copy()生成的c和d变量地址发生了改变,他们指向不同的内存地址
>>> id(c)
4539032712
>>> id(d)
4537507720
# 深拷贝
>>> id(e)
4539050632


# 赋值,a,b两个变量指向的同一个内存地址
>>> id(a[2])
4539035144
>>> id(b[2])
4539035144
# 浅拷贝,列表内的列表只拷贝的地址,指向内存的实体对象不变
>>> id(c[2])
4539035144
>>> id(d[2])
4539035144
# 深拷贝,列表内的列表在内存中是一个新的实体对象
>>> id(e[2])
4539032648

原理图如下: 

变量c和变量d是一样的,就没画线。

Python 深拷贝、浅拷贝、切片_第1张图片

你可能感兴趣的:(学习总结,Python基础)