show | version | enable_checker |
---|---|---|
step |
1.0 |
true |
- 赋值的时候注意有两种情况
- =
- 直接复制变量引用的地址
- 拷贝
- 新建列表
- 复制列表项的引用地址
- 但如果列表项是列表
- 就原样复制列表地址
- 一改全改
- =
- 可以做一个真正互不影响的副本吗?
- 无论列表维度如何
- 都不互相影响
- help(list.copy)
- 目前的拷贝是一种shallow copy
- 浅浅的拷贝
- 只复制列表项具体引用的地址
- 而不为新的容器重新申请新的内存空间
- 除了浅拷贝之外可以有深拷贝吗?
- 搜索
- 就点第一个
- 比较了=、浅拷贝、深拷贝(deepcopy)
- = 直接把地址给赋过去
- 浅拷贝
- 把原列表里面列表项的引用都拷贝出来
- 做成新的 list 赋过去
- 多维列表会导致引用到同一个地址空间
- 一概全改
- 把原列表里面列表项的引用都拷贝出来
- 深拷贝
- 彻底复制地址里面指向的每一个东西
- 彻底重新分配内存地址空间
- 彻底制作一个真正新的副本
- 副本和原本彼此互不影响
- 观察试试深拷贝
- 有深浅变化才有意思啊
- 不同的拷贝类型
import copy
l1 = [["oeasy",[165,70]],["o2z",[170,100]]]
l2 = copy.deepcopy(l1)
l1[0][1][0] = 150
- 要知深浅
- 更高维度的列表深拷贝也能完全制作副本吗?
- 这维度明显上去了
- 这么深的层次的话
- 深拷贝都能一层层复制出来么?
- 深拷贝确实很深
- 所有相应的位置引用的地址都不相同!
- 避免浅尝辄止
- 需要深耕
-
等号赋值的意思是
- 把对象地址直接传给另一个对象
-
浅拷贝的意思是
- 目标列表拥有自己的独立地址
- 目标列表的列表项也有独立地址
- 但是目标列表的列表项引用的还是原来的地址
-
深拷贝的意思是
- 完全为各个层级被复制的元素新申请空间
- 整个列表是新空间中的
- 和原来的列表彻底断绝引用的关系
- 赋值的时候注意有三种情况
- =
- 直接复制变量引用的地址
- 浅拷贝
- 新建列表
- 复制列表项的引用地址
- 深拷贝
- 新申请空间
- 彻底做一个新的副本
- 把所有东西都复制出来
- 这就是深拷贝所谓深的地方
- =
- 列表三种复制方法我们清楚了
- 如果是多维列表的运算呢?
- 内存中的样子是如何的呢?🤔
- 下次再说 👋