Lớp dữ liệu Python so với hiệu suất dict

Lần thử nghiệm đầu tiên tạo một từ điển mới từ một bản sao của từ điển gốc và gán lại một biến chứa nó

Điều này bị trừ khỏi thử nghiệm tiếp theo, mỗi lần thử nghiệm này sẽ tạo lại và chỉ định lại từ điển để đảm bảo chúng tôi luôn thêm một mục nhập mới vào từ điển

$ python3.2 -mtimeit -s"pnoun = {'nom': 'she', 'obl': 'her', 'pos_det': 'her', 'pos_pro': 'hers', 'reflex': 'herself'}; pnoun2 = pnoun.copy[]" "pnoun = pnoun2.copy[]"

1000000 loops, best of 3: 0.431 usec per loop

$ python3.2 -mtimeit -s"pnoun = {'nom': 'she', 'obl': 'her', 'pos_det': 'her', 'pos_pro': 'hers', 'reflex': 'herself'}; pnoun2 = pnoun.copy[]" "pnoun['foo'] = 'a sizeable string'; pnoun = pnoun2.copy[]"

1000000 loops, best of 3: 0.957 usec per loop

$ python3.2 -mtimeit -s"pnoun = {'nom': 'she', 'obl': 'her', 'pos_det': 'her', 'pos_pro': 'hers', 'reflex': 'herself'}" "string = 'blah blah ' + pnoun.get['obl'] + ' blah blah'"

1000000 loops, best of 3: 0.637 usec per loop
4

nhanh hơn. Thêm một trường mới vào một đối tượng hiện có thông qua toán tử không gian tên

Thử nghiệm đầu tiên tính thời gian tạo đối tượng Đại từ giới tính và gán lại một biến chứa một

Điều này bị trừ khỏi thử nghiệm tiếp theo, mỗi lần thử nghiệm này sẽ tạo lại và chỉ định lại đối tượng để đảm bảo chúng tôi luôn thêm một trường mới vào đối tượng

$ python3.2 -mtimeit -s"from gender import GenderPronouns; pnoun = GenderPronouns['she', 'her', 'her', 'hers', 'herself']" "pnoun = GenderPronouns['she', 'her', 'her', 'hers', 'herself']"

100000 loops, best of 3: 2.17 usec per loop

$ python3.2 -mtimeit -s"from gender import GenderPronouns; pnoun = GenderPronouns['she', 'her', 'her', 'hers', 'herself']" "pnoun.foo = 'a sizeable string'; pnoun = GenderPronouns['she', 'her', 'her', 'hers', 'herself']"

100000 loops, best of 3: 2.9 usec per loop

$ python3.2 -mtimeit -s"pnoun = {'nom': 'she', 'obl': 'her', 'pos_det': 'her', 'pos_pro': 'hers', 'reflex': 'herself'}" "string = 'blah blah ' + pnoun.get['obl'] + ' blah blah'"

1000000 loops, best of 3: 0.637 usec per loop
5

Chậm hơn. Thêm trường mới vào đối tượng hiện có thông qua setattr[]

$ python3.2 -mtimeit -s"from gender import GenderPronouns; pnoun = GenderPronouns['she', 'her', 'her', 'hers', 'herself']" "setattr[pnoun, 'foo', 'a sizeable string']; pnoun = GenderPronouns['she', 'her', 'her', 'hers', 'herself']"

100000 loops, best of 3: 3.12 usec per loop

$ python3.2 -mtimeit -s"pnoun = {'nom': 'she', 'obl': 'her', 'pos_det': 'her', 'pos_pro': 'hers', 'reflex': 'herself'}" "string = 'blah blah ' + pnoun.get['obl'] + ' blah blah'"

1000000 loops, best of 3: 0.637 usec per loop
6

chậm nhất. Thêm mục mới vào từ điển hiện có thông qua phương thức update[]

$ python3.2 -mtimeit -s"pnoun = {'nom': 'she', 'obl': 'her', 'pos_det': 'her', 'pos_pro': 'hers', 'reflex': 'herself'}; pnoun2 = pnoun.copy[]" "pnoun.update[{'foo': 'a sizeable string'}]; pnoun = pnoun2.copy[]"

100000 loops, best of 3: 2.03 usec per loop

$ python3.2 -mtimeit -s"pnoun = {'nom': 'she', 'obl': 'her', 'pos_det': 'her', 'pos_pro': 'hers', 'reflex': 'herself'}" "string = 'blah blah ' + pnoun.get['obl'] + ' blah blah'"

1000000 loops, best of 3: 0.637 usec per loop
7

Kiểm tra bộ nhớ [Không gian]

Các thử nghiệm sau đây đã được thực hiện trong Python 3. 2 phiên dịch viên

Thứ tự đã được chỉnh sửa cho rõ ràng, nhưng các giá trị không thay đổi

Thiết lập nó và chỉ ra rằng các giá trị bên trong là như nhau

________số 8_______

Sử dụng getsizeof[] để đo kích thước của các đối tượng theo octet [byte 8 bit]

getsizeof[] chỉ hiển thị kích thước của đối tượng, tôi. e. nó không bao gồm kích thước của các trường, khóa hoặc giá trị đi kèm

Tại sao sử dụng DataClass trên từ điển?

Lớp dữ liệu thay thế nhiều hơn cho NamedTuples, sau đó là từ điển . Trong khi NamedTuples được thiết kế để không thay đổi, thì các lớp dữ liệu có thể cung cấp chức năng đó bằng cách đặt freeze=True trong trình trang trí, nhưng nhìn chung cung cấp tính linh hoạt hơn nhiều.

Các lớp học có nhanh hơn từ điển không?

Đó là 12. Nhanh hơn 85% khi sử dụng thuộc tính một lớp [từ điển một cấp] để lưu trữ 100.000 biến so với khi sử dụng 100.000 thuộc tính lớp.

Từ điển có nhanh hơn trong Python không?

Danh sách là một tập hợp dữ liệu được sắp xếp theo thứ tự, trong khi các từ điển lưu trữ dữ liệu dưới dạng các cặp khóa-giá trị bằng cách sử dụng cấu trúc hashtable. Do đó, việc tìm nạp các phần tử từ cấu trúc dữ liệu danh sách khá phức tạp so với từ điển trong Python. Do đó, từ điển nhanh hơn danh sách trong Python .

Khi nào tôi nên sử dụng DataClass Python?

Sử dụng lớp dữ liệu, bạn có thể tạo các đối tượng chỉ đọc . Tất cả những gì bạn phải làm là đặt đối số cố định thành True bên trong trình trang trí @dataclass. Khi bạn thực hiện việc này, bạn sẽ ngăn không cho bất kỳ ai sửa đổi giá trị của các thuộc tính sau khi đối tượng được khởi tạo.

Chủ Đề