赋值
在python中,赋值语句是建立对象的引用,而不是复制对象,变量就像一个指针。例如
id函数获得的是对象的内存地址,如果两个对象内存地址一样,说明这两个对象是同一个对象,id(a) == id(b)就相当于a is b。
上述例子输出结果都一样,说明alist 和blist是一样的,指向相同的内存空间,blist是alist的一个引用。
赋值操作不会开辟新的内存地址空间,只是增加一个对象引用。由于指向的是同一片地址空间修改了alist,另一个也会改变。
浅拷贝
浅拷贝会产生新的对象,其内容是原内容的索引
浅拷贝有三种形式:切片操作,工厂函数,copy模块中的copy方法
clist 的每个元素都与alist的元素地址相同,clist的元素是alist的元素一个引用,但是clist的地址与alist不同,他们是两个不同的对象,因此修改clist理论上不会影响alist。
dlist更新了,但是alist并未更新。
但是浅拷贝之所以被称为浅拷贝,是因为它只拷贝了一层,如果list中嵌套有list,如果修改了嵌套的list情况将不一样。
输出是一样的,这是因为,修改了外层的元素会修改他的引用,让他们指向别的地址,但是修改嵌套列表中的元素,列表地址并未发生变化指向的还是同一位置。
深拷贝
深拷贝是在拷贝的基础之上,把嵌套的元素也改变了,因此他的时间和空间开销都要高,修改一个对象另一个对象并不会发生变化。
原文地址:https://www.cnblogs.com/ghming/p/8447095.html
时间: 2024-11-25 21:38:45