文章目录
Python中直接赋值,浅拷贝,深拷贝详解
1. Python中的变量存储方式和分类
- Python中一切都是对象,python的变量就是一个对象的别名,它通过指针联系到对象实际的存储的地方
- Python中对象可以分为可变对象和不可变对象,不可变对象主要有数值,字符串,元组,不可变集合
- 对于不可变对象,这个变量指向的内存空间不可被改变,所以当给这变量赋值的时候,会重新开辟一块内存空间,变量再指向这个新的内存空间
- 对于可变对象,这个变量的值改变的时候,实际上就是所指的内存空间保存的值发生了变化,没有开辟新的内存空间,也没有发生复制行为,就是原地改变了内存空间中的值
2. 变量的赋值语句
让我们看看赋值语句
a = "Fioman"
,python解释器都做了什么工作
上面是变量的第一次赋值,又叫初始化,如果是不可变对象的重新赋值,则会重新开辟一段内存空间,改变它的绑定关系.比如
a = "Hammer"
**
如果是可变的对象,变量的赋值语句有所不同
**
例如
val = [1,2,3,4]
结论
> 1. 当普通的不可变类型(数值,字符串,元组)在初始化和赋值的时候都会重新开辟一段新的内存来保存新的值> 2. 当复杂的数据结构在赋值的时候,如果只是修改其中的元素,不会更改这个变量本身的内存地址,只是更改了复杂数据结构元素的地址.
3. 浅拷贝
浅拷贝原理
> 1. 浅拷贝只是拷贝了原来的对象的第一层的引用,浅拷贝变量本身的地址是一个新的> 2. 浅拷贝的内容不是新的,也就是说浅拷贝的新对象的内容和旧对象是同一个> 3. 浅拷贝只是改变了最外层变量的地址,但是这个变量里面的元素指向的是同一块内存> 4. 浅拷贝的对象和旧对象是两个独立的对象,它们的子对象还是指向了同一个对象浅拷贝常见的方式
> 1. 切片赋值 val = lst[:]> 2. 各种工厂函数 set(),dict(),list(),tuple(),以及它们的copy()函数> 3. copy模块的copy()方法
4. 深拷贝
深拷贝原理
> 1. 深拷贝和浅拷贝一样,都会创建一个新的容器对象> 2. 和浅拷贝不同的是,深拷贝的子对象也会重新创建一个新的对象> 3. 深拷贝的对象和旧拷贝的对象,是相互独立的,双方互不影响> 4. 深拷贝的对象和旧对象会共享不可变的子对象,但是因为不可变,所以不影响它们之间的独立性深拷贝的方式
> **>> copy.deepcopy ndarray.copy()>
> **
本文转载自: https://blog.csdn.net/Fioman_GYM/article/details/120614672
版权归原作者 Fioman_Hammer 所有, 如有侵权,请联系我们删除。
版权归原作者 Fioman_Hammer 所有, 如有侵权,请联系我们删除。