默默佩佩 发表于 2020-8-23 23:06:09

python零基础12讲课后练习第一个问题答案不明白

第一个问题,
>>> old =
>>> new = old
>>> old =
>>> print(new)
上一讲课后练习不是说new = old这种方法拷贝的列表,new 随old变化而变化吗,怎么old变成了,new还是呢

我爱吃爆米花 发表于 2020-8-23 23:25:18

新人浅见,old变量重新赋值了,old标签指向新的值,而new还是指向.如果old调用的是列表的方法,就是sort,reverse这样的方法,那么new 随old变化而变化.

昨非 发表于 2020-8-24 01:01:03

变量名相当于一个盒子
第一行:old里装了
第二行:把old里的东西复制了一份装到了new里,所以new里装了
第三行:把old里的东西换成了
第四行:你说new里是啥{:10_297:}
即:两个变量各自指向两个存储空间,除彼此赋值时以外,二者没有任何关系
(ps:刚入门的话建议先学点儿理论知识,别急慢慢来
看在我这么贴心的份上记得给个最佳{:10_256:})

Twilight6 发表于 2020-8-24 08:25:24



帮你整体解析下,看看下面:

old =    #第一次赋值
new = old    #将old 赋值给new   这行代码就等价与new =
old =    #这里你的old重新赋值,就会覆盖原本的old 变量,但是new 来源还是
print(new)

你可以这样做
old =
new = old          #他们的根本来源都是
new.append(6)

print(old)



同理:
old =
new = old          #他们的根本来源都是
old.append(6)
print(new)



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

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

而你后面是 old = 是重新给old 赋值 python 就会重新赋予他一个id    就和先前的id 不同 new id 还是原来的old = 时候的id

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

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

sunrise085 发表于 2020-8-24 10:25:23

python中变量名实际上是贴标签,将变量名重新赋值,实际上是将标签从一个地址上撕下来贴到另一个地址上去了
python细节之2、变量名与标签 变量的赋值与修改

czzhbq 发表于 2021-1-4 14:15:59

Twilight6 发表于 2020-8-24 08:25
帮你整体解析下,看看下面:




学到了{:5_95:}
页: [1]
查看完整版本: python零基础12讲课后练习第一个问题答案不明白