进击のpython
深浅copy
copy是什么意思?
复制 (又学一个单词!开不开森)
那啥叫复制呢?
百度百科上给的解释是:仿原样品制造
我们曾经有过这样的印象
a = "zhangsan"
b = a
a = "jack"
print(a, b) # jack zhangsan
这样就相当于用 b 复制了 一遍 a 对吧!
那你在网上down文章的时候,作者把文章删除了
你的电脑里就没了吗?
要是没了?那我存在硬盘里的女神学习资料岂不是保存不住了?
所以我用b复制一份之后,a就算变了。也跟我b没得关系
但是我们还发现过这样的情况
a = [1, 2, 3, [1, 2, 3]]
b = a
a[-1][1] = "jack"
print(a, b) # [1, 2, 3, [1, 'jack', 3]] [1, 2, 3, [1, 'jack', 3]]
不对啊!!!!!
这和刚开始说的不一样啊!!!!
a变了b怎么也变了???????
当我们操作字符串的时候,就相当于在内存地址(黄色框)里开辟一个空间,里面存afwaf,并把它叫做 a
然后当 b=a 时看似是 红色的b指向a 实际上是 绿色的b指向afwaf
然后当 a = af 的时候,又开辟一个空间,里面存 af 并把它叫做 a
不能有两个一样的变量名(讲变量的时候讲过了)
所以 a 指向 afwaf 的红色线就断了
所以现在
a 就是 af b就是 afwaf
而当我们操作可变的数据类型,比如列表,字典等,就是这样的
当我对列表进行修改的时候,就不再开辟新的内存空间
而是!共!享!内!存!空!间!
这样,a 和 b 就是始终相等的
给你一张偷来的图
可以看到 copy 的 只是第一层的内存地址,但是第二层,还是共享内存空间的!
所以,只改变第一层,就不会共享,各改各的
但是改到第二层,就会共享,你动我也动!
深copy 就一句话
你动你的,跟我没关系
所以我下载的女神学习资料用的就是深copy这个形式