python for循环中的浅拷贝
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python for循环中的浅拷贝相关的知识,希望对你有一定的参考价值。
参考技术A用习惯了C的循环,经常因为循环修改list的值产生bug,主要就是循环是进行浅拷贝的过程。
在对集合进行遍历的时候,为了节省空间,对于集合中的对象不会创建一个新的对象,如上图的params,而是存储该对象地址,所以对 对象中的内容 的修改会直接影响到原集合。
但如果直接修改params,则不会造成原集合的变化。
需要注意的是,
python中的浅拷贝和深拷贝
1.浅拷贝
copy.copy()
浅拷贝是拷贝只拷贝最外一层(这里所说的拷贝是重新生成一个内存地址,也就是只有最外层的地址是重新生成)
import copy li=[23,45,[‘wew‘,35,[33,00]]] li1=copy.copy(li) print(id(li),id(li1)) print(id(li[0]),id(li1[0])) print(id(li[2][1]),id(li1[2][1])) #输出:35540704 5872576 # 1625084720 1625084720 # 1625084912 1625084912 #可以看出只有li与li1的地址不同 他们的元素的地址是相同的
2.深拷贝
copy.deepcopy()
深拷贝是除了最里面一层的其他的都拷贝(最里面一层只拷贝值 不重新生成一个内存地址)
import copy li=[23,[2,99],[‘wew‘,35,[33,0]]] li1=copy.deepcopy(li) print(li1) print(id(li),id(li1)) print(id(li[2][2]),id(li1[2][2])) print(id(li[2][2][0]),id(li1[2][2][0]))
#输出:[23, [2, 99], [‘wew‘, 35, [33, 0]]] 7734816 7183296 7687104 7734936 1625084880 1625084880
3.对于数字和字符串是完全拷贝
import copy s1=‘wang‘ s2=copy.copy(s1) print(s2) print(id(s1),id(s2)) #输出:wang # 4868256 4868256
以上是关于python for循环中的浅拷贝的主要内容,如果未能解决你的问题,请参考以下文章