== 與is 的使用
==是比較兩個對象是否相等际歼,是值的比較
is 是判斷兩個引用是否指
向了同一個對象,是引用地址的比較
淺拷貝 與 深拷貝
淺拷貝是拷貝了引用地址,沒有拷貝內(nèi)容 ,一方修改苗傅,另一方也會受到影響 賦值就是一個淺拷貝
'''
深拷貝:遞歸拷貝 深拷貝是內(nèi)容一樣,地址不一樣
一方修改班巩,另一方不受影響
b = copy.deepcopy(a) a,b內(nèi)容一樣渣慕,地址不一樣 a如果修改了,b不受影響
如果a中有對象引用,也會拷貝到b中摇庙,內(nèi)容一樣旱物,地址不一樣
'''
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() 函數(shù)
'''
copy.copy() 方法 結(jié)果會因為是可變或者不可變導(dǎo)致結(jié)果不同
只能拷貝一層
根據(jù)類型有關(guān)。如果是列表(可變類型)卫袒,深拷貝宵呛。如果是元組(不可變)淺拷貝
如果里面還有嵌套的對象,淺拷貝
如果是嵌套的可變的夕凝,外層如果是可變的宝穗,拷貝外層相當(dāng)于深拷貝,地址不一樣码秉,
但內(nèi)層可變類型的值變化逮矛,都會受到影響
如果外層是不可變的,內(nèi)層是可變的转砖,拷貝結(jié)果是淺拷貝须鼎,地址一樣,內(nèi)容也一樣府蔗,
一方改變晋控,另一方也受影響
'''
a = (1,2,3)
b = copy.copy(a) # 相當(dāng)于淺拷貝
print(id(a))
print(id(b))
print(a)
print(b)
生成器 generator
python中一邊循環(huán)一邊生成的機(jī)制,叫做生成器 generator
創(chuàng)建生成器:
如果要一個一個打印出來可以通過 next(g)函數(shù)獲得生成器的下一個返回值
創(chuàng)建生成器的第二種方式:
yield 值
1姓赤、調(diào)用函數(shù)赡译,得到一個生成器對象。這個函數(shù)沒有執(zhí)行
2不铆、next調(diào)用得到的對象蝌焚,如果遇到了yield,代碼會阻塞,next的返回值就yield后的值
但是用for循環(huán)調(diào)用generator時,發(fā)現(xiàn)拿不到generator的return語句的返回值 要拿到返回值誓斥,這時就需要捕獲異常啦
生成器的特點:
1只洒,節(jié)約內(nèi)存,
2,迭代到下一次的調(diào)用時劳坑,所使用的參數(shù)都是第一次所保留下的红碑,即是說,在整個所有函數(shù)調(diào)用的參數(shù)都是第一次所調(diào)用時保留的泡垃,而不是新創(chuàng)建的