美文网首页
python中一些问题(1)

python中一些问题(1)

作者: 风雨的问候 | 来源:发表于2017-07-13 20:04 被阅读0次
    == 与is 的使用

    ==是比较两个对象是否相等,是值的比较

    is 是判断两个引用是否指
    向了同一个对象,是引用地址的比较

    is ==.JPG
    浅拷贝 与 深拷贝

    浅拷贝是拷贝了引用地址,没有拷贝内容 ,一方修改,另一方也会受到影响 赋值就是一个浅拷贝


    ![aaa.JPG](https://img.haomeiwen.com/i6853464/b6a0d3e503565f1e.JPG?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

    '''
    深拷贝:递归拷贝 深拷贝是内容一样,地址不一样
    一方修改,另一方不受影响
    b = copy.deepcopy(a) a,b内容一样,地址不一样 a如果修改了,b不受影响
    如果a中有对象引用,也会拷贝到b中,内容一样,地址不一样
    '''
    a= [1,2,3,4]

    b = copy.deepcopy(a) # 深拷贝

    print(id(a))
    print(id(b))
    print(a)
    print(b)

    a.append(5)
    print(a)
    print(b)
    print(''50)

    a = [1,2,3]
    b = [4,5,6]
    c=(a,b)

    d = copy.deepcopy(c) # 深拷贝

    print(id(c))
    print(id(d))
    print(c)
    print(d)

    a.append(0)
    print(c)
    print(d)

    copy.copy() 函数

    '''
    copy.copy() 方法 结果会因为是可变或者不可变导致结果不同

    只能拷贝一层

    根据类型有关。如果是列表(可变类型),深拷贝。如果是元组(不可变)浅拷贝

    如果里面还有嵌套的对象,浅拷贝
    

    如果是嵌套的可变的,外层如果是可变的,拷贝外层相当于深拷贝,地址不一样,
    但内层可变类型的值变化,都会受到影响

    如果外层是不可变的,内层是可变的,拷贝结果是浅拷贝,地址一样,内容也一样,
    一方改变,另一方也受影响
    '''
    a = (1,2,3)
    b = copy.copy(a) # 相当于浅拷贝
    print(id(a))
    print(id(b))
    print(a)
    print(b)

    生成器 generator

    python中一边循环一边生成的机制,叫做生成器 generator

    创建生成器:


    捕获1.JPG

    如果要一个一个打印出来可以通过 next(g)函数获得生成器的下一个返回值

    z.JPG

    创建生成器的第二种方式:
    yield 值

    1、调用函数,得到一个生成器对象。这个函数没有执行
    2、next调用得到的对象,如果遇到了yield,代码会阻塞,next的返回值就yield后的值

    q.JPG

    但是用for循环调用generator时,发现拿不到generator的return语句的返回值 要拿到返回值,这时就需要捕获异常啦

    生成器的特点:
    1,节约内存,
    2,迭代到下一次的调用时,所使用的参数都是第一次所保留下的,即是说,在整个所有函数调用的参数都是第一次所调用时保留的,而不是新创建的

    相关文章

      网友评论

          本文标题:python中一些问题(1)

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