Python基础——深拷贝+浅拷贝

深拷贝 浅拷贝

都是拷贝,不存在快捷方式
——目的:避免一些隐藏的错误

——比如这样的代码:

# 传入的list为dd1 = dd[:]
# 这样改变dd1就不会改变dd的值
def func(l):
 	l.append(4)
 	l[3].append(5)
my_list = [1,2,3,[]]
func(m_list[:])
print(my_list)
  • 浅拷贝:

    • list = list[:] —— 切片操作

    • 是指重新分配一块内存,如果源对象不可变,深还是浅都一样

    • 只拷贝了外边的壳子

    • 源对象

    • b = copy.copy(a)

    • list【list】,(对于可变的数据)浅拷贝可能会有副作用

    • 不可变的数据类型,保存的地址是一样的:Python基础——深拷贝+浅拷贝_第1张图片

    • # tuple是不可变数据结构(体现在id上)
      >>>1 True True
      2 True True
      3 True True
      
  • 深拷贝:

    • b = a
    • 里里外外都拷贝进去了
    • 以递归的方式查找,所以也会出现一些问题
a == b: a is b
判断a和b分别的value 判断分别的id值(少用)
元组里列表的值变=元组变 》=-255 & 《 =256 (大小可缓存的)

代码问题:
Python基础——深拷贝+浅拷贝_第2张图片

存储角度看:
Python基础——深拷贝+浅拷贝_第3张图片

两个list的地址是不一样的。
Python基础——深拷贝+浅拷贝_第4张图片

append后,first里的子列表会又多了一个5

你可能感兴趣的:(Python基础,python)