赋值
在 Python 中,对象的赋值就是简单的对象引用,这点和 C++ 不同,如下所示:
a = [1,2,"hello",['python', 'C++']]
b = a
在上述情况下,a 和 b 是一样的,他们指向同一片内存,b 不过是 a 的别名,是引用。
我们可以使用 b is a 去判断,返回 True,表明他们地址相同,内容相同,也可以使用 id() 函数来查 看两个列表的地址是否相同。
赋值操作 (包括对象作为参数、返回值) 不会开辟新的内存空间,它只是复制了对象的引用。也就是说除了 b 这个名字之外,没有其他的内存开销。
修改了 a,也就影响了 b,同理,修改了 b,也就影响了 a。
浅拷贝 (shallow copy)
浅拷贝会创建新对象,其内容非原对象本身的引用,而是原对象内第一层对象的引用。
浅拷贝有三种形式:切片操作、工厂函数、copy 模块中的 copy 函数。
比如上述的列表 a;
- 切片操作:b = a[:] 或者 b = [x for x in a];
- 工厂...