python中一些问题(1)

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

上一篇下一篇

猜你喜欢

热点阅读