求助浅拷贝问题
浅拷贝拷贝的是引用的话,如果一维列表y=x.copy(),为什么修改x[1]值,y[1]不变啊,这两的地址不是一样吗?改变其中一个,另一个怎么不变? x = ['a', 'b', 'c']y = x.copy() # 只是拷贝 x 里面的元素
z = x # 指向 x 同一对象(意思就是指向 x 地址)
x = 13 # x 元素改变
print(x)
print(y)
print(z)['a', 13, 'c']
['a', 'b', 'c']
['a', 13, 'c'] y=x.copy() 等价于y=x[:],
x,y 地址虽然不同 但是成员x和成员y的地址是相同的。
用其他值替换x的成员 x ,y的成员 y[1]不变是情理之中
如果x的成员 x是列表x.pop()后 y的成员y列表也会变 这才是浅拷贝的意味
kogawananari 发表于 2021-10-28 22:20
y=x.copy() 等价于y=x[:],
x,y 地址虽然不同 但是成员x和成员y的地址是相同的。
用其他值替换x ...
x和y的地址相同,为什么改变x,y不变呢 j8787887910 发表于 2021-10-30 15:14
x和y的地址相同,为什么改变x,y不变呢
a = b 可以让a的地址和b一样
再a = c新的a地址必然会变成c的地址导致和b的不一样
这换成x y一样 本帖最后由 j8787887910 于 2021-10-30 17:46 编辑
kogawananari 发表于 2021-10-30 15:43
a = b 可以让a的地址和b一样
再a = c新的a地址必然会变成c的地址导致和b的不一样
可是改变的是x的值,而不是改变x的地址,改变值之后的x的地址不应该和y的地址一样吗?如果一样的话,y不也应该变吗 j8787887910 发表于 2021-10-30 17:41
可是改变的是x的值,而不是改变x的地址,改变值之后的x的地址不应该和y的地址一样吗?如果 ...
{:10_292:} 这是浅拷贝改变x y也变了的话那就不是浅拷贝了 而是x即是y了 本帖最后由 j8787887910 于 2021-10-30 18:33 编辑
kogawananari 发表于 2021-10-30 18:09
这是浅拷贝改变x y也变了的话那就不是浅拷贝了 而是x即是y了
好吧,我试了下改变x的值之后,发现x的地址也变了,难怪y不变,这又是为什么 j8787887910 发表于 2021-10-30 18:24
好吧,我试了下改变x的值之后,发现x的地址也变了,难怪y不变,这又是为什么
地址用id散列用hash
a = 1 b = 1
a和b地址一样是 1是可散列的遵循符号机制
再赋值其他的 b=2 地址就不一样了
a =[] b = a
列表不可散列, 要地址一样只能赋值
再赋值b其他的 b=[]地址就不一样了
元组比较特别 可以散列不过无论怎么样 赋值都会改变id
页:
[1]