list_one = [1, 2, 3, 4]
list_two = list_one
list_two[0] = 9
print(list_one)
执行以上代码理想的结果输出是 [1,2,3,4];注意这是“理想结果”
实际的结果却是 [9,2,3,4];追其原因就涉及到下面的深浅拷贝问题(上例为典型的浅拷贝)
浅拷贝:拷贝对象引用
list_one = [1, 2, 3, 4] 对list_one对象赋值;即:
list_two = list_one 将list_one的引用赋给list_two;即:
list_two[0] = 9 修改了list_one和list_two的引用;即:
因此造成了上述问题;可以通过查看id的方式查看浅拷贝,浅拷贝对象的引用相同,因此id也应该相同:
为此,我们需要进行深拷贝来解决这样的问题;
深拷贝:拷贝对象本身; (Python中copy模块的deepcopy方法提供了深拷贝)
import copy
list_one = [1, 2, 3, 4]
list_two = copy.deepcopy(list_one)
list_two[0] = 9
print(list_one)
输出结果是:[1,2,3,4]
list_two = copy.deepcopy(list_one) 即:
list_two[0] = 9 只改变list_two的引用,list_one的引用不变;即:
用id来进行验证: