Từ Python 3 tài liệu:
sys.intern(string)
Nhập chuỗi ký tự trong bảng chuỗi “thực tập nội trú” và trả về chuỗi thực tập nội trú - đó là chuỗi bản thân hoặc một bản sao. Các chuỗi nội bộ hữu ích để đạt được hiệu suất nhỏ trong tra cứu từ điển - nếu các phím trong từ điển được tập trung, và phím tra cứu được thực tập, các so sánh chính (sau khi băm) có thể được thực hiện bằng cách so sánh thay vì chuỗi so sánh. Thông thường, các tên được sử dụng trong các chương trình Python được tự động interned và các từ điển được sử dụng để giữ các thuộc tính mô-đun, lớp hoặc cá thể có các thuộc tính mô-đun .
Chuỗi nội bộ không phải là bất tử; bạn phải giữ một tham chiếu đến giá trị trả về của thực tập() xung quanh để hưởng lợi từ nó.
Làm rõ:
Như các tài liệu cho thấy, hàm sys.intern
được thiết kế để được sử dụng cho hiệu suất tối ưu hóa.
Chức năng sys.intern
duy trì bảng thực tập chuỗi. Khi bạn cố gắng thực tập một chuỗi, hàm trông nó lên trong bảng và:
Nếu chuỗi không tồn tại (chưa được thực tập nội trú chưa) chức năng tiết kiệm nó trong bảng và trả về nó từ bảng chuỗi nội bộ.
>>> import sys
>>> a = sys.intern('why do pangolins dream of quiche')
>>> a
'why do pangolins dream of quiche'
Trong ví dụ trên, a
giữ chuỗi nội bộ. Mặc dù nó không hiển thị, hàm sys.intern
đã lưu đối tượng chuỗi 'why do pangolins dream of quiche'
trong bảng chuỗi nội bộ.
Nếu chuỗi tồn tại (đã được interned) hàm trả về từ bảng chuỗi nội bộ.
>>> b = sys.intern('why do pangolins dream of quiche')
>>> b
'why do pangolins dream of quiche'
Mặc dù nó không phải là ngay lập tức có thể nhìn thấy, bởi vì chuỗi 'why do pangolins dream of quiche'
đã được thực tập nội trú trước đây, b
hiện nắm giữ đối tượng chuỗi giống như a
.
>>> b is a
True
Nếu chúng ta tạo cùng một chuỗi mà không sử dụng thực tập, chúng tôi kết thúc với hai đối tượng chuỗi khác nhau có cùng giá trị.
>>> c = 'why do pangolins dream of quiche'
>>> c is a
False
>>> c is b
False
Bằng cách sử dụng sys.intern
bạn đảm bảo rằng bạn không bao giờ tạo ra hai đối tượng chuỗi có cùng giá trị khi bạn yêu cầu việc tạo ra một đối tượng chuỗi thứ hai với cùng một giá trị như một đối tượng chuỗi hiện có, bạn nhận được một tham chiếu đến đối tượng chuỗi đã tồn tại từ trước. Bằng cách này, bạn đang lưu bộ nhớ. Ngoài ra, so sánh các đối tượng chuỗi bây giờ là rất hiệu quả bởi vì nó được thực hiện bằng cách so sánh các địa chỉ bộ nhớ của hai đối tượng chuỗi thay vì nội dung của chúng.
Nguồn
2009-07-16 11:02:23
Nếu chúng ta viết mã trong một file '.py' và làm điều đó chúng tôi nhận' c là a' như 'True'. Tại sao vậy? –