vvv3449860 发表于 2020-3-22 10:10:10

没有操作list1,为什么list1的值会扩展?

请教各位,下面代码,已经把list1赋给了temp,也在temp的基础上进行的extend,而且并没有操作list1,为什么list1的值也被扩展了?

list1 =
list2 =
temp = list1
temp.extend(list2)
list3 = temp




结果
list1 =
list2 =
temp =
list3 =

一个账号 发表于 2020-3-22 10:14:52

因为 temp 和 list1 指向的是同一个内存地址,改成这样就不会了:

temp = list1[:]

vvv3449860 发表于 2020-3-22 10:34:56

一个账号 发表于 2020-3-22 10:14
因为 temp 和 list1 指向的是同一个内存地址,改成这样就不会了:

谢谢你的解答,确实可行。另一个问题是:关于list1[:]我可不可以理解为把list1复制了一遍,再把这个复制的值赋值给temp,这样原有的list1就不会被改变了呢?

qiuyouzhi 发表于 2020-3-22 10:45:18

vvv3449860 发表于 2020-3-22 10:34
谢谢你的解答,确实可行。另一个问题是:关于list1[:]我可不可以理解为把list1复制了一遍,再把这个复制 ...

是的,你要是没有[:]就把地址也复制过去了,这样他俩基本就是"一个"了。

vvv3449860 发表于 2020-3-22 10:48:23

qiuyouzhi 发表于 2020-3-22 10:45
是的,你要是没有[:]就把地址也复制过去了,这样他俩基本就是"一个"了。

懂了,阿里嘎多{:5_109:}

qiuyouzhi 发表于 2020-3-22 10:50:16

vvv3449860 发表于 2020-3-22 10:48
懂了,阿里嘎多

那就设个最佳答案吧~

TJBEST 发表于 2020-3-22 11:00:09

temp = list1[:] 并不是深拷贝 建议上网搜搜 深拷贝和浅拷贝。 这个方法属于浅拷贝
比如list1 = ]
temp = list1[:]
temp = 1000
temp=22
那么list1变成 ]

一个账号 发表于 2020-3-22 11:20:23

vvv3449860 发表于 2020-3-22 10:48
懂了,阿里嘎多

那就设为最佳答案吧~

zltzlt 发表于 2020-3-22 19:04:10

请见:https://fishc.com.cn/thread-159176-1-1.html
页: [1]
查看完整版本: 没有操作list1,为什么list1的值会扩展?