新手求助
1. >>> old = 2. >>> new = old3. >>> old = 4. >>> print(new)得出的结果是 但是a=[0,1,2,3,4,5b=ac=a.copy()del a[1''' 各变量值为: a= b= c='''b.remove(4)''' 各变量值为: a= b= c=感觉这个时候和上一例子一样,a不会变,只有b变
你的排版有点怪... 本帖最后由 Twilight6 于 2020-6-9 15:51 编辑
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等)都是在原列表上进行改变的,只改变本源,导致与其相关的都一起发生改变
第二段是
a=
b=a
c=a.copy()
del a
b.remove(4)
变量值为:
a=
b=
c=
感觉这个时候应该和上一例子一样,a不会变,只有b变 Future博弈 发表于 2020-6-9 15:50
第二段是
a=
b=a
你a和b指向的始终都是一个地址,所以操作a和操作b都是对一个地址进行操作的。
c浅拷贝了a一份,内存地址不同了,所以c没啥变化。 Future博弈 发表于 2020-6-9 15:50
第二段是
a=
b=a
copy() 方法只拷贝列表,会生成新的 id 地址,你可以理解下3l,相当于列表切片方法[:] Future博弈 发表于 2020-6-9 15:50
第二段是
a=
b=a
copy不可变元素时候,你可以当作是把整个重新赋值给了变量举个例子:
a=# 这里面都是整型,是不可变元素
c=a.copy()# 这就相当于 c = ,和 a 不关联,前提是里面都是不可变元素 Twilight6 发表于 2020-6-9 15:47
你可以这样做
嗯嗯 好的 我看懂了 = 就会重新给予一个id
感谢感谢{:10_298:} Future博弈 发表于 2020-6-9 15:58
嗯嗯 好的 我看懂了 = 就会重新给予一个id
感谢感谢
哈哈 好聪明!~{:10_298:}理解的好快 还有这 还有这 哈哈哈 {:10_281:}~~~~
页:
[1]