这是我参与2022首次更文挑战的第26天,活动详情查看:2022首次更文挑战
🐍列表复制
数据是在编程逻辑中经常遇到的,复制意味着产生了数据的副本。大量数据在工作中其实也需要备份。列表的功能就是能够把大量的数据放在一起,但列表里的数据是可以进行增删改查的,数据一旦发生了变化,就不能回复到原来的样子了。如果还需要对原来的数据进行查验,没有备份就很难做到了。
- 浅复制
使用lists2 = lists1.copy()来产生复制出的列表。copy()方法就是浅复制。代码如下:
lists1 = [1,2,3,4]
lists2 = lists1.copy()
print("列表1:"+str(lists1))
print("列表2:"+str(lists2))
lists1[1] = 5
print("发生赋值变化后")
print("列表1:"+str(lists1))
print("列表2:"+str(lists2))
运行结果如下:
从运行结果来看,浅复制后的列表并没有改变原始数据。从原理上来说,浅复制的第一层创建的是新的内存地址,但其实只限于第一层,而从第二层开始,指向的还是同一个内存地址。所以,对于第二层及更深的层数来说,还是保持了一致性。如图所示:
浅复制产生的列表并没有产生关联的关系,对原列表或新列表进行增删改都不会对没有发生增删改数据的列表产生影响,使列表的历史数据被保留。浅复制都是对第一层地址的,只为第一层开辟空间,后面第二层或更深层都保持了一致性。如图所示:
从图中可以看出,lists1和lists2第一层都指向各自的内存地址,第二层就指向了公共的内存地址,由此可见,当第二层或更深层的数据发生改变时,他们的一致性是同步的。对于列表中含有列表这样的数据,浅复制是没有完成完全意义上的复制的。