python中的编程小知识(重点是生成器generator)

2017-07-13  本文已影响0人  MambaMentality

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

生成器详解

生成器详解2

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.迭代到下一次的调用时,所使用的参数都是第一次所保留下的,即是说,在整个所有函数调用的参数都是第一次所调用时保留的,而不是新创建的。

上一篇下一篇

猜你喜欢

热点阅读