Hướng dẫn what is a weak reference python - Python tham chiếu yếu là gì
Python hỗ trợ các tài liệu tham khảo yếu như các đối tượng hạng nhất. Có hai loại đối tượng cụ thể trực tiếp thực hiện các tài liệu tham khảo yếu. Đầu tiên là một đối tượng tham chiếu đơn giản và thứ hai hoạt động như một proxy cho đối tượng gốc càng nhiều càng tốt. Show Return true if ob is either a reference or proxy object. This function always succeeds. intpyweakref_checkref (ob) return true nếu ob là một đối tượng tham chiếu. Chức năng này luôn thành công. PyWeakref_CheckRef(ob)¶Return true if ob is a reference object. This function always succeeds. intpyweakref_checkproxy (ob) return true nếu ob là một đối tượng proxy. Chức năng này luôn thành công. PyWeakref_CheckProxy(ob)¶Return true if ob is a proxy object. This function always succeeds. PyObject*pyweakref_newref (pyObject*ob, pyObject*gọi lại) Giá trị return: tham chiếu mới. Một phần của ABI ổn định.*PyWeakref_NewRef(PyObject*ob, PyObject*callback)¶Return value: New reference. Part of the Stable ABI. Trả về một đối tượng tham chiếu yếu cho đối tượng OB. Điều này sẽ luôn trả về một tài liệu tham khảo mới, nhưng không được đảm bảo để tạo một đối tượng mới; Một đối tượng tham chiếu hiện có có thể được trả về. Tham số thứ hai, gọi lại, có thể là một đối tượng có thể gọi được nhận thông báo khi OB được thu thập rác; Nó sẽ chấp nhận một tham số duy nhất, đó sẽ là chính đối tượng tham chiếu yếu. Gọi lại cũng có thể là 0.
PyObject*pyweakref_newproxy (pyObject*ob, pyObject*gọi lại) Giá trị return: tham chiếu mới. Một phần của ABI ổn định.*PyWeakref_NewProxy(PyObject*ob,
PyObject*callback)¶Return value: New reference. Part of the Stable ABI. Trả về một đối tượng proxy tham chiếu yếu cho đối tượng ob. Điều này sẽ luôn trả về một tài liệu tham khảo mới, nhưng không được đảm bảo để tạo một đối tượng mới; Một đối tượng proxy hiện có có thể được trả về. Tham số thứ hai, gọi lại, có thể là một đối tượng có thể gọi được nhận thông báo khi OB được thu thập rác; Nó sẽ chấp nhận một tham số duy nhất, đó sẽ là chính đối tượng tham chiếu yếu. Gọi lại cũng có thể là 0.
PyObject*pyweakref_getObject (pyObject*ref) Giá trị return: tham chiếu mượn. Một phần của ABI ổn định.*PyWeakref_GetObject(PyObject
*ref)¶Return value: Borrowed reference. Part of the Stable ABI. Trả về đối tượng được tham chiếu từ một tài liệu tham khảo yếu, ref. Nếu người giới thiệu không còn tồn tại, hãy trả về 7.Ghi chú Hàm này trả về một tham chiếu mượn cho đối tượng được tham chiếu. Điều này có nghĩa là bạn nên luôn luôn gọi 8 trên đối tượng ngoại trừ khi nó không thể bị phá hủy trước khi sử dụng cuối cùng của tài liệu tham khảo đã mượn.borrowed reference to the referenced object. This means that you should always call 8 on the object except when it cannot be destroyed before the last usage of the borrowed reference. PyObject*pyweakref_get_object (pyobject*ref) Giá trị return: tham chiếu mượn.*PyWeakref_GET_OBJECT(PyObject
*ref)¶Return value: Borrowed reference. Tương tự như 9, nhưng không kiểm tra lỗi.Tôi đã cố gắng hiểu làm thế nào các danh sách tham chiếu/từ điển của Python hoạt động như thế nào. Tôi đã đọc tài liệu cho nó, tuy nhiên tôi không thể tìm ra cách chúng hoạt động và những gì chúng có thể được sử dụng. Bất cứ ai có thể cho tôi một ví dụ cơ bản về những gì họ làm và một lời giải thích về cách họ làm việc? (Chỉnh sửa) Sử dụng mã của Thomas, khi tôi thay thế OBJ cho 0 it throws:
hỏi ngày 28 tháng 3 năm 2012 lúc 12:57Mar 28, 2012 at 12:57
Học thuyếtSố lượng tham chiếu thường hoạt động như vậy: Mỗi lần bạn tạo tham chiếu đến một đối tượng, nó được tăng lên một và bất cứ khi nào bạn xóa một tham chiếu, nó sẽ giảm một. Tài liệu tham khảo yếu cho phép bạn tạo tham chiếu đến một đối tượng sẽ không tăng số lượng tham chiếu. Số lượng tham chiếu được sử dụng bởi bộ thu gom rác của Python khi nó chạy: bất kỳ đối tượng nào có số lượng tham chiếu là 0 sẽ được thu thập rác. Bạn sẽ sử dụng các tài liệu tham khảo yếu cho các đối tượng đắt tiền hoặc để tránh các tài liệu tham khảo vòng tròn (mặc dù người thu gom rác thường tự làm điều đó). Cách sử dụngĐây là một ví dụ hoạt động chứng minh cách sử dụng của họ:
Đã trả lời ngày 28 tháng 3 năm 2012 lúc 13:09Mar 28, 2012 at 13:09
Thomas Orozcothomas OrozcoThomas Orozco 51.1k9 Huy hiệu vàng110 Huy hiệu bạc115 Huy hiệu đồng9 gold badges110 silver badges115 bronze badges 8 Chỉ muốn chỉ ra rằng Feakref.ref không hoạt động cho danh sách tích hợp vì không có 1 trong danh sách 2. Ví dụ: mã sau đây xác định một thùng chứa danh sách hỗ trợ yếu.
Đã trả lời ngày 18 tháng 12 năm 2014 lúc 5:17Dec 18, 2014 at 5:17
Jichijichijichi 5,8151 Huy hiệu vàng31 Huy hiệu bạc25 Huy hiệu đồng1 gold badge31 silver badges25 bronze badges 1 Vấn đề là chúng cho phép các tài liệu tham khảo được giữ lại cho các đối tượng mà không ngăn chúng được thu thập rác. Hai lý do chính tại sao bạn muốn đây là nơi bạn thực hiện quản lý tài nguyên định kỳ của riêng bạn, ví dụ: Đóng các tập tin, nhưng vì thời gian giữa các lần vượt qua như vậy có thể dài, người thu gom rác có thể làm điều đó cho bạn; Hoặc nơi bạn tạo một đối tượng và nó có thể tương đối tốn kém để theo dõi nơi nó ở trong chương trình, nhưng bạn vẫn muốn đối phó với các trường hợp thực sự tồn tại. Trường hợp thứ hai có lẽ là phổ biến hơn - nó phù hợp khi bạn đang giữ, ví dụ: Một danh sách các đối tượng để thông báo và bạn không muốn hệ thống thông báo để ngăn chặn thu gom rác. Đã trả lời ngày 28 tháng 3 năm 2012 lúc 13:05Mar 28, 2012 at 13:05
MarcinmarcinMarcin 47.5K17 Huy hiệu vàng125 Huy hiệu bạc198 Huy hiệu đồng17 gold badges125 silver badges198 bronze badges 2 Dưới đây là ví dụ so sánh 3 và 4:
Và đây là đầu ra:
Lưu ý làm thế nào trong trường hợp đầu tiên một khi chúng ta 5 đối tượng thực tế cũng sẽ bị xóa khỏi từ điển 6.Trong trường hợp hoặc lớp từ điển Python thông thường 3, chúng ta có thể cố gắng xóa đối tượng nhưng nó vẫn sẽ ở đó như được hiển thị.Lưu ý: Nếu chúng tôi sử dụng 8, chúng tôi sẽ không gọi 9 sau đó, vì chỉ 8 loại bỏ hiệu quả đối tượng.Đã trả lời ngày 1 tháng 6 năm 2019 lúc 13:50Jun 1, 2019 at 13:50
tuyến tiền liệtprosti 38.2k11 Huy hiệu vàng169 Huy hiệu bạc144 Huy hiệu đồng11 gold badges169 silver badges144 bronze badges Tài liệu tham khảo yếu được sử dụng để làm gì?Một tham chiếu yếu cho phép người thu gom rác thu thập đối tượng trong khi vẫn cho phép ứng dụng truy cập đối tượng. Một tham chiếu yếu chỉ có giá trị trong khoảng thời gian không xác định cho đến khi đối tượng được thu thập khi không có tài liệu tham khảo mạnh nào tồn tại.permits the garbage collector to collect the object while still allowing the application to access the object. A weak reference is valid only during the indeterminate amount of time until the object is collected when no strong references exist.
Tài liệu tham khảo mạnh và yếu là gì?Một tài liệu tham khảo yếu chỉ là một con trỏ đến một đối tượng không bảo vệ đối tượng khỏi bị ARC giải quyết.Trong khi các tài liệu tham khảo mạnh mẽ làm tăng số lượng giữ lại của một đối tượng lên 1, các tài liệu tham khảo yếu thì không.Ngoài ra, các tài liệu tham khảo yếu không thoát khỏi con trỏ đến đối tượng của bạn khi nó xử lý thành công.strong references increase the retain count of an object by 1, weak references do not. In addition, weak references zero out the pointer to your object when it successfully deallocates.
Các tài liệu tham khảo yếu được thực hiện như thế nào?Khi một tham chiếu yếu A được tạo ra một đối tượng B, sẽ có một mục trong Hashtable REVENTADED hoặc được tạo, có chìa khóa sẽ là con trỏ tới B. "Dirty" - để lưu trữ giá trị băm đặc biệt với mỗi đối tượng, sẽđược không khi đối tượng bị phá hủy.. "Dirty" - to store a special hash-value with each object, which would be zeroed when the object is destroyed.
__ yếu __ __ trong Python là gì?__weakref__ chỉ là một đối tượng mờ đục tham khảo tất cả các tham chiếu yếu đến đối tượng hiện tại.Trên thực tế, đây là một ví dụ của yếu (hoặc đôi khi yếu), vừa là một tham chiếu yếu đến đối tượng và một phần của danh sách được liên kết gấp đôi cho tất cả các tài liệu tham khảo yếu cho đối tượng đó.an opaque object that references all the weak references to the current object. In actual fact it's an instance of weakref (or sometimes weakproxy ) which is both a weak reference to the object and part of a doubly linked list to all weak references for that object. |