Python中如何区分浅拷贝和深拷贝对可变与不可变对象的影响?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1660个文字,预计阅读时间需要7分钟。
第一次遇到深拷贝和浅拷贝的问题时,我使用Python在一个for循环中对一个list赋值。使用的语句是 `a +=b`。这个操作会导致b不断被加入到循环中,每次计算后,list会变得混乱。后来才意识到,Python中a=a 这种赋值方式是引用赋值,而不是真正的值赋值。
第一次遇到深拷贝和浅拷贝的问题是用python在一个for循环中对一个list赋值,使用的语句是
a = b
这个b会不断带入循环,每次计算得到,最后发现list乱七八糟的,后来才发现,python中a=b并不是创建一个a,将b的值赋给它,而是b的地址的一个复制。
后来其实在C#的另一个问题中,也是类似的错误,当然这个问题要复杂的多,因此特地重写了一篇。
我不由自主地会想,浅拷贝与深拷贝的区别是什么,在什么场景下要用到浅拷贝,而什么场景下用深拷贝呢?
1、首先明白什么是浅拷贝和深拷贝
- 可变对象、不可变对象
在了解深浅拷贝之前,先了解可变与不可变对象。
可变对象是指地址所指向的值可变的对象,相反不可变对象就是地址所指向的对象是不可变的。
本文共计1660个文字,预计阅读时间需要7分钟。
第一次遇到深拷贝和浅拷贝的问题时,我使用Python在一个for循环中对一个list赋值。使用的语句是 `a +=b`。这个操作会导致b不断被加入到循环中,每次计算后,list会变得混乱。后来才意识到,Python中a=a 这种赋值方式是引用赋值,而不是真正的值赋值。
第一次遇到深拷贝和浅拷贝的问题是用python在一个for循环中对一个list赋值,使用的语句是
a = b
这个b会不断带入循环,每次计算得到,最后发现list乱七八糟的,后来才发现,python中a=b并不是创建一个a,将b的值赋给它,而是b的地址的一个复制。
后来其实在C#的另一个问题中,也是类似的错误,当然这个问题要复杂的多,因此特地重写了一篇。
我不由自主地会想,浅拷贝与深拷贝的区别是什么,在什么场景下要用到浅拷贝,而什么场景下用深拷贝呢?
1、首先明白什么是浅拷贝和深拷贝
- 可变对象、不可变对象
在了解深浅拷贝之前,先了解可变与不可变对象。
可变对象是指地址所指向的值可变的对象,相反不可变对象就是地址所指向的对象是不可变的。

