进击の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怎么也变了???????


番外:深浅copy-LMLPHP

当我们操作字符串的时候,就相当于在内存地址(黄色框)里开辟一个空间,里面存afwaf,并把它叫做 a

然后当 b=a 时看似是 红色的b指向a 实际上是 绿色的b指向afwaf

然后当 a = af 的时候,又开辟一个空间,里面存 af 并把它叫做 a

不能有两个一样的变量名(讲变量的时候讲过了)

所以 a 指向 afwaf 的红色线就断了

所以现在

a 就是 af b就是 afwaf


而当我们操作可变的数据类型,比如列表,字典等,就是这样的

番外:深浅copy-LMLPHP

当我对列表进行修改的时候,就不再开辟新的内存空间

而是!共!享!内!存!空!间!

这样,a 和 b 就是始终相等的

给你一张偷来的图番外:深浅copy-LMLPHP

可以看到 copy 的 只是第一层的内存地址,但是第二层,还是共享内存空间的!

所以,只改变第一层,就不会共享,各改各的

但是改到第二层,就会共享,你动我也动!


深copy 就一句话

你动你的,跟我没关系

所以我下载的女神学习资料用的就是深copy这个形式

来个练习题吧


*有点别扭*
*多做习题*

05-11 19:36