深淺拷貝和列表生成器

2021-09-27 09:41:10 字數 1152 閱讀 2166

淺拷貝:拷貝不可變型別不會給拷貝的物件開闢新的記憶體空間,而只是拷貝了這個物件的引用。對可變型別的第一層物件進行拷貝,對拷貝的物件會開闢新的記憶體空間進行儲存,子物件不進行拷貝。

深拷貝:不可變型別進行深拷貝如果子物件沒有可變型別則不會進行拷貝,而只是拷貝了這個物件的引用,否則會對該物件到最後乙個可變型別的每一層物件就行拷貝, 對每一層拷貝的物件都會開闢新的記憶體空間進行儲存

列表推導式

[i for i in range(1, 101)]

[i for i in range(1, 101) if i % 2== 0]

[i*j for i in range(1, 10) for j in range(1, 10)]

列表推導式很強大,但是直接生成列表,那麼當列表中的元素特別多的時候,記憶體的占有就特別的誇張

生成器斐波拉契數枚舉例:

def teat

(n):

a =0 b =

1 i =

0while iv = a

a,b = b,a+b

yeild v

i +=

1teat(10

)g =

next

(v)print

(g)

print

("複雜的資料結構中的賦值"

)list1 =[1

,2,3

,4,5

,6]list2 = list1

print(id

(list1)

) # 42367240

print(id

(list2)

) # 42367240

list1.

('new item'

)print

(list1) # [1,

2,3,

4,5,

6,'new item'

]print

(list2) # [1,

2,3,

4,5,

6,'new item'

]print(id

(list1)

) # 42367240

print(id

(list2)

) # 42367240

生成器和深淺拷貝

生成器不是把資料全部算出來,用乙個算乙個,大量節省資源空間 生成器推到式 將列表推到式的改為 message i for i in range 5 print message 生成器斐波拉契數枚舉例 def teat n a 0 b 1 i 0 while i深淺拷貝 需要匯入拷貝模組 import...

列表生成器

coding utf 8 並不會一次性的將所有的結果計算出來,存放到記憶體當中,而是在使用某一些值得時候,才會去動態計算結果並返回,而沒有使用的值是不會計算的。print xrange 1,10 print range 1,10 generator x x for x in xrange 1,4 p...

列表生成式,列表生成器

coding utf 8 列表生成式是快速生成乙個列表一些公式 numbers for x in range 0,101 print numbers 要放入列表資料 簡單的表示式 1 表示式 2 x for x in range 0,101 for 迴圈遍歷出來的值,放入列表中 numbers x ...