python2和3中zip的差異 坑

2021-08-20 23:29:18 字數 963 閱讀 9301

最近用python寫個東西,裡面用到了乙個zip,記憶體飆公升,甚是費解,查閱資料後發現zip在python2和3中的機制不同

class

foo(object):

def__init__

(self):

self.items = range(3)

def__getitem__

(self, i):

print('__getitem__', i)

return self.items[i]

foo1 = foo()

foo2 = foo()

print(zip(foo1, foo2))

# for s1, s2 in zip(foo1, foo2):

# print(s1, s2)

python2

# 輸出:

# 提前已經遍歷了一遍,組成新的列表了

('__getitem__', 0)

('__getitem__', 0)

('__getitem__', 1)

('__getitem__', 1)

('__getitem__', 2)

('__getitem__', 2)

('__getitem__', 3)

[(0, 0), (1, 1), (2, 2)]

python3

# 輸出:

0x7f96933f9648>

可以看到python2中是先把2個foo**全部遍歷一下組成乙個新的列表,十分耗記憶體**

而python3是返回乙個迭代器,遍歷zip(foo1, foo2)時才會去取foo1和foo2的每個元素,不費記憶體

python2與python3的區別和差異

一 核心類差異 1.python3 對 unicode 字元的原生支援。python2 中使用 ascii 碼作為預設編碼方式導致 string 有兩種型別 str 和 unicode,python3 只 支援 unicode 的 string。python2 和 python3 位元組和字元對應關...

Python2和Python3中 的區別

首先區別於 表示整除,被除數和除數均為整型時 得到的結果為整型,被除數和除數至少有乙個是浮點型時,得到的結果是浮點型。也就是說 操作python2和python3沒有區別 表示除法,在python3中,無論被除數和除數是哪種型別,得到的都是浮點型。在python2中,被除數和除數至少有乙個浮點型時,...

python2和3 的區別

python2和python3分別是python的兩個版本,python3作為乙個公升級版,許多針對早期python版本設計的程式都無法在python3.0上正常執行的。區別 python2 既可以使用帶小括號的方式,也可以使用乙個空格來分隔列印內容,比如 print hi python3 使用 p...