深浅拷贝

深浅拷贝_第1张图片
内存分析.png
1:is 和 ==的区别

is 是比较两个引用是否指向了同一个对象(地址引用比较)。
== 是比较两个对象是否相等。(比较的数值)

2:简单赋值
深浅拷贝_第2张图片
图片.png
3:浅拷贝

浅拷贝是对于一个对象的顶层拷贝 仅仅为其第一层建立了一个引用

import copy

a = [1,2,3,4]
b = a.copy() # 将b中的内容复制了一份给了另一个地址
# b = a
print(a==b)
# a = [1,2,3,9]
a.append(3)
print(a==b)
print(a)
print(b)
3:深拷贝

递归的拷贝这个对象深层次链接的对象
比如列表中套列表这样的

我们来思考一下,在Python内部,整数对象是如此广泛地被使用,尤其是那些比较小的整数。短短几秒之间,我们可能就要用的它们成千上万次,如果我们在创建它们的时候使用malloc来请求分配内存,删除它们时再调用free来释放内存。显然,这样的性能水平是不可能达到我们的要求的,而且也会造成极大的不必要的浪费。

于是,在Python内部,对于小整数使用了对象池技术。
我们可以看出,在Python2.7中,“小整数”的定义是[-5,256],而这个指向一个整数对象数组的指针small_ints就是这个对象池机制的核心。如果我们想要重新定义“小整数”怎么办?简单,我们可以修改源代码并重新编译。

对于小整数对象,Python直接把它们缓存在小整数对象池中,用于共享

>>> a=1
>>> b=1
>>> a is b
True
>>> a=256
>>> b=256
>>> a is b
True
>>> a=257
>>> b=257
>>> a is b
False

你可能感兴趣的:(深浅拷贝)