Python内存与指针

关于指针的理解


Python中的所有变量都是指针,没有类型
每个变量指向一个内存位置,内存由Python管理
当一个内存位置不再有指针指向它的时候,就会被释放
赋值的过程是改变指向的过程
inplace的操作是真正会影响到内存中内容的操作
函数传值传的都是指针

当传入参数的值是基本类型的时候(整数、浮点、布尔),是不会影响到原来的值的,相当于按值传递。而当传入的值不是基本类型的时候,相当于按引用传递,函数内部的操作会影响到原值。
为什么?因为所有变量名都相当于指针,但是基本类型却是不会改变的,1就是1。但是列表、集合和自定义类都可以改变,所以它们相当于按引用传递。

可变对象:list、dict、set、自定义的类型
指向的内存位置不变的同时值可以改变

不可变对象:tuple、string、int、float、bool
值不能改变,只能改变指向的内存位置

变量作为参数传入函数的时候,是否能在函数中被修改,取决于修改的时候,改变的内存中的内容还是改变指向的位置

函数默认参数一定要设定为不可变参数

深复制和浅复制模块:copy

返回一个潜复制

copy.copy(someData)

返回一个深复制

copy.deepcopy(someData)