1. ==, is 的使用
总结
1. is是比较两个引用是否指向了同一个对象(地址引用比较)。
2. ==是比较两个对象是否相等。(比较的数值)
2.深拷贝 与 浅拷贝
2.1 浅拷贝
浅拷贝是对于一个对象的顶层拷贝
通俗的理解是:拷贝了引用,并没有拷贝内容
a = [1,2,3,4]
b = a
print(id(a))
print(id(b))
a.append(5)
print(a)
print(b)
2.2 深拷贝
深拷贝的是内容一样。地址不一样。一方修改了,另一方不受影响。
b = copy.deepcopy(a)
b得到的内容与a的内容完全一样,地址不一样。
就算a中有对象引用,b中对应的引用的对象依然是内容一样,地址不一样。
递归拷贝
注意:
如果是一个不可变对象(内部存储还是不可变对象),深拷贝的结果 = 浅拷贝,地址一样
例如:
正常情况下的深拷贝 拷贝的目标是不可变对象时候的特殊情况2.3 copy.copy()
格式: b = copy.copy(a)
copy.copy这个函数结果会因为是可变或者不可变导致结果不同
只能拷贝一层。根据类型有关。如果是列表(可变类型),深拷贝。如果是元组(不可变)浅拷贝
如果里面还有嵌套的对象,浅拷贝
3 生成器(gener)
3.1
3.2 模拟多任务实现方式之一:协程
协程工作def test1():
while True:
print("--1--")
yield None
def test2():
while True:
print("--2--")
yield None
t1 = test1()
t2 = test2()
while True:
t1.__next__()
t2.__next__()
生成器的特点:
1.节约内存
2.迭代到下一次的调用时,所使用的参数都是第一次所保留下的,即是说,在整个所有函数调用的参数都是第一次所调用时保留的,而不是新创建的。
网友评论