Python中如何复制列表
我们怎么复制一个列表呢,我们来看看下面代码
list_test = [1, 2, 3]
copy_list = list_test # 这只是引用,指向同一个内存地址
copy_list[0] = 99
print(list_test) # 输出 [99, 2, 3](原列表被修改)
从结果中不能看出,很容易发现修改copy_list,list_test也改变了也同时修改了。原来是这样的,只是一个引用,他们就指向了一个东西(位置),数据是完全共享的。
#deepcp
import copy
list_test = [1, [2, 3], 4]
q_test = copy.copy(list_test)#浅拷贝影响原列表
deep_copy = copy.deepcopy(list_test)#深拷贝完全独立
# 测试修改嵌套列表,看如何影响的
q_test[1][0] = 99
deep_copy[1][0] = 100
print(list_test) # 输出 [1, [99, 3], 4]
print(q_test) # 输出 [1, [99, 3], 4] #
print(deep_copy) # 输出 [1, [100, 3], 4] 这个和原来的不一样,没有修改到原来的,
浅拷贝和深拷贝就是调用不同的函数,依据你的需要来选择。
浅拷贝其实是创建了一个新列表,新列表里面的元素是对原元素的一个引用,修改这些的时候,原列表也变化了,如果你新加的元素,修改就改不了原列表了。这就是所谓外层独立,内层共享就是引用的部分。
我们看看给浅拷贝增加一个元素,并做修改
#deepcp
import copy
list_test = [1, [2, 3], 4]
q_test = copy.copy(list_test)#浅拷贝影响原列表
#deep_copy = copy.deepcopy(list_test)#深拷贝完全独立
# 测试修改嵌套列表,看如何影响的
q_test[1][0] = 99
#deep_copy[1][0] = 100
q_test.append(5)#增加一个
print(q_test)#打印下看看
q_test[0]=55
print(list_test)
print(q_test)
#print(deep_copy) # 输出 [1, [100, 3], 4] 这个和原来的不一样,没有修改到原来的,
很明显不是原来列表的东西,是独立的,不影响的,你学费了吗。