鱼C论坛

 找回密码
 立即注册
查看: 1211|回复: 9

[已解决]新手求助

[复制链接]
发表于 2020-6-9 15:46:41 | 显示全部楼层
你的排版有点怪...
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-9 15:47:32 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Twilight6 于 2020-6-9 15:51 编辑

  1. old = [1, 2, 3, 4, 5]   #第一次赋值
  2. new = old    #将old 赋值给new   这行代码就等价与  new = [1,2,3,4,5]
  3. old = [6]     #这里你的old重新赋值,就会覆盖原本的old 变量,但是new 来源还是[1,2,3,4,5]
  4. print(new)
复制代码


你可以这样做
  1. old =  [1,2,3,4,5]
  2. new = old          #他们的根本来源都是[1,2,3,4,5]
  3. new.append(6)

  4. print(old)

  5. [1,2,3,4,5,6]
复制代码


同理:
  1. old =  [1,2,3,4,5]
  2. new = old          #他们的根本来源都是[1,2,3,4,5]
  3. old.append(6)
  4. print(new)

  5. [1,2,3,4,5,6]
复制代码


python中 变量都有id (通俗说就是来源,id(new)可以查询new的id)

id相同 他们就相当于捆绑在一起了   其中一个改变 另一个也会随之改变  就像   量子纠缠  

而你后面是 old = [6]  是重新给old 赋值 python 就会重新赋予他一个id    就和先前的id 不同 new id 还是原来的old = [1,2,3,4,5] 时候的id

而 copy 也就是浅拷贝,相当于只拷贝列表本身,但是内部的可变元素并没有与之拷贝成新的

同理 列表的大部分方法(如 romove、pop、insert、append、sort等)都是在原列表上进行改变的,只改变本源,导致与其相关的都一起发生改变

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-9 15:55:22 | 显示全部楼层
Future博弈 发表于 2020-6-9 15:50
第二段是
a=[0,1,2,3,4,5]
b=a

copy() 方法只拷贝列表,会生成新的 id 地址,你可以理解下3l,相当于列表切片方法[:]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-9 15:57:55 | 显示全部楼层
Future博弈 发表于 2020-6-9 15:50
第二段是
a=[0,1,2,3,4,5]
b=a

copy不可变元素时候,你可以当作是把整个重新赋值给了变量  举个例子:
  1. a=[0,1,2,3,4,5]  # 这里面都是整型,是不可变元素
  2. c=a.copy()  # 这就相当于 c = [0,1,2,3,4,5] ,和 a 不关联,前提是里面都是不可变元素
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-9 15:58:56 | 显示全部楼层
Future博弈 发表于 2020-6-9 15:58
嗯嗯 好的 我看懂了 = 就会重新给予一个id  
感谢感谢

哈哈 好聪明!~理解的好快
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-18 20:51:27 | 显示全部楼层
还有这 还有这 哈哈哈 ~~~~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-5 03:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表