引用
- 在 Python 中,一切赋值都是引用。例如,a = b 的作用是构建一条 a ->memory(b) 的引用。其本质是,让 a 和 b 指向同一块内存。
- 使用 del x ,实际上是删除一条引用,但不一定会回收其内存。
- 函数的参数传递,本质上都是引用的传递。
可变对象和不可变对象:
- 可变对象:对可变对象的改变,会在内存中添加更改。对于这种更改,不会改变其变量名的引用地址。例如下面的代码就不会改变 a 的引用:
a = [1,2,3]
a.append(4)
但是如果你做一些骚操作,就会改变引用:
a += [4]
- 不可变对象:对该对象的改变,本质上是在一块新的内存上构建该对象,并更改变量的引用:
a = 10000
a += 1
比较和拷贝
-
比较:
1.==用于判断两个对象之间的值是否相等
2.is 用于判断两者是否为同一个对象(即比较内存的地址)
3.在 Python 中,会重用 -5 ~ 256 之间的 int 型值,使用 is 时要注意 -
拷贝:
1.浅拷贝:为新对象重新分配一块内存,新对象中的元素是旧对象中的元素的引用。
副作用:如果一个对象中包含可变的子元素,会对子元素产生公共引用
2.深拷贝:重新分配一块内存,并完全复制原对象中的所有元素的数据:
import copy
a = [1,2,3]
b = copy.deepcopy(a)
网友评论