Hướng dẫn dictionary is ordered or unordered in python - từ điển có thứ tự hoặc không có thứ tự trong python
Họ được đặt đặt hàng [1].insertion ordered[1]. Kể từ Python 3.6, đối với việc triển khai Python Cpython, từ điển hãy nhớ thứ tự của các mục được chèn vào. Đây được coi là một chi tiết thực hiện trong Python 3.6; Bạn cần sử dụng Kể từ Python 3.7, đây là một tính năng ngôn ngữ được đảm bảo, không chỉ là một chi tiết triển khai. Từ một tin nhắn Python-Dev của GVR:, this is a guaranteed language feature, not merely an implementation detail. From a python-dev message by GvR:
Điều này đơn giản có nghĩa là bạn có thể phụ thuộc vào nó. Các triển khai khác của Python cũng phải cung cấp một từ điển được đặt hàng chèn nếu họ muốn trở thành một triển khai phù hợp của Python 3.7.
Về cơ bản, bằng cách giữ hai mảng.
Trong quá trình triển khai trước đó, một mảng thưa thớt của loại 0 và kích thước 1 phải được phân bổ; Thật không may, nó cũng dẫn đến rất nhiều không gian trống vì mảng đó không được phép nhiều hơn 2 vì lý do hiệu suất. (Và không gian trống vẫn có kích thước 0!).Đây không phải là trường hợp bây giờ vì chỉ các mục được yêu cầu được lưu trữ (những mục đã được chèn) và một mảng thưa thớt của loại 4 ( 5 tùy thuộc vào kích thước dict) 2S được giữ lại. Không gian trống thay đổi từ loại 0 thành 4.
Vì vậy, rõ ràng, việc tạo ra một mảng thưa thớt của loại 0 đòi hỏi nhiều hơn nhiều so với một mảng thưa thớt để lưu trữ OrderedDict 0s.Bạn có thể thấy cuộc trò chuyện đầy đủ trên Python-dev liên quan đến tính năng này nếu quan tâm, đó là một bài đọc tốt. Trong đề xuất ban đầu được thực hiện bởi Raymond Hettinger, một hình ảnh của các cấu trúc dữ liệu được sử dụng có thể được nhìn thấy để nắm bắt ý chính của ý tưởng.
Như bạn có thể thấy trực quan bây giờ, trong đề xuất ban đầu, rất nhiều không gian về cơ bản là trống rỗng để giảm va chạm và làm cho việc tra cứu nhanh hơn. Với cách tiếp cận mới, bạn giảm bộ nhớ theo yêu cầu bằng cách di chuyển sự thưa thớt nơi nó thực sự cần thiết, trong các chỉ số. . Các thứ tự có thể đảo ngược, cung cấp các phương pháp nhạy cảm theo thứ tự và, chủ yếu, cung cấp một bài kiểm tra bình đẳng về thứ tự (`==`, `! =`). Hiện tại không cung cấp bất kỳ hành vi/phương pháp nào. [2]: Việc triển khai từ điển mới thực hiện tốt hơn ** bộ nhớ khôn ngoan ** bằng cách được thiết kế nhỏ gọn hơn; Đó là lợi ích chính ở đây. Tốc độ khôn ngoan, sự khác biệt không quá quyết liệt, có những nơi mà Dict mới có thể giới thiệu các hồi quy nhẹ (ví dụ như lookups) trong khi ở những người khác (lặp lại và thay đổi kích thước xuất hiện trong tâm trí). Nhìn chung, hiệu suất của từ điển, đặc biệt là trong các tình huống thực tế, được cải thiện do sự nhỏ gọn được giới thiệu. Tại sao từ điển không được đặt hàng?Một loại từ điển thông thường không theo dõi thứ tự chèn của các cặp (khóa, giá trị) và do đó lặp lại thông qua các phím dựa trên cách chúng được lưu trữ trong bảng Hash, lần lượt dựa trên các giá trị ngẫu nhiên để giảm va chạm.does not track the insertion order of the (key, value) pairs and thus iterates through the keys based on how they are stored in the hash table which in turn is based on random values so as to reduce collisions.
Tại sao từ điển trong Python được gọi là không có thứ tự?Từ điển được gọi là một tập hợp đối tượng không được đặt hàng vì nó lưu trữ dữ liệu dưới dạng cặp giá trị khóa và cặp đối tượng mà chúng giữ không được lập chỉ mục ngầm.it stores data as key-value pair and the pair of object they hold aren't indexed implicitly. |