美文网首页
python中的编程小知识(重点是生成器generator)

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

作者: MambaMentality | 来源:发表于2017-07-13 20:41 被阅读0次

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

    相关文章

      网友评论

          本文标题:python中的编程小知识(重点是生成器generator)

          本文链接:https://www.haomeiwen.com/subject/yodghxtx.html