2014-10-10 20 views
21

Tại sao trình xây dựng Python dict chậm hơn so với cú pháp bằng chữ?Tại sao cú pháp chữ dict được ưu tiên hơn so với hàm tạo dict?

Sau cuộc tranh luận nóng với đồng nghiệp của tôi, tôi đã làm một số so sánh và nhận được số liệu thống kê sau đây:

python2.7 -m timeit "d = dict(x=1, y=2, z=3)" 
1000000 loops, best of 3: 0.47 usec per loop 

python2.7 -m timeit "d = {'x': 1, 'y': 2, 'z': 3}" 
10000000 loops, best of 3: 0.162 usec per loop 

lý do các nhà xây dựng chậm là gì? Và trong tình huống nào, nếu có, nó sẽ nhanh hơn?

+4

Thông thường điều này phải làm với thực tế là 'dict' có thể trỏ đến một thứ khác. Vì vậy, thông dịch viên không thể thực hiện bất kỳ tối ưu hóa thực sự nào. Với cú pháp '{}', nó có thể làm cho những tối ưu hóa đó. –

+7

nghĩa là: 'dict' luôn là hàm gọi chính xác, trong khi' {} 'được xử lý tại thời gian biên dịch. – Eevee

+3

có thể trùng lặp với [khác biệt giữa "d = dict()" và "d = {}"] (http://stackoverflow.com/questions/2745008/differences-between-d-dict-and-d) –

Trả lời

28

Các constructor là chậm hơn vì nó tạo ra các đối tượng bằng cách gọi dict() chức năng, trong khi trình biên dịch chuyển dict đen vào BUILD_MAP bytecode, tiết kiệm lời gọi hàm.

Các vấn đề liên quan