2013-06-26 23 views
5

Đây là một ví dụ về tham chiếu tuần hoàn của Python.Trong Python, số tham chiếu của tham chiếu cyclic là gì và tại sao?

>>> a = [1] 
>>> b = [2] 
>>> a.append(b) 
>>> b.append(a) 

sau này,

>>> sys.getrefcount(a) = 3 
>>> sys.getrefcount(b) = 3 

Tại sao ab có một số tài liệu tham khảo của 3 ??

Xin lỗi, tôi đã gặp lỗi.

câu hỏi thực sự là câu hỏi khác.

>>> GNU = ['is not Unix'] 
>>> GNU.insert(0, GNU) 
>>> sys.getrefcount(GNU) = 4 

Tại sao số tham chiếu của 'GNU' là 4?

Cảm ơn trước :)

+1

Tôi không thể sao chép ví dụ cuối cùng của bạn. – BrenBarn

+0

Tôi hiện đang sử dụng phiên bản 2.7.5. nó hoạt động tốt trên chương trình của tôi. – nextdoordoc

+1

Vẫn không thể tạo lại câu hỏi được cập nhật của bạn. 'từ sys nhập khẩu getrefcount như r; g = [0]; r (g); g.insert (0, g); r (g)' → 2, 3; Dù sao, hãy thử kiểm tra số lần truy cập * trước * và * sau * lần chèn. Có lẽ những gì bạn không hiểu không phải là những gì bạn nghĩ rằng bạn không hiểu. – kojiro

Trả lời

4

Có tài liệu tham khảo từ 3 đến từng:

  1. Trong danh sách của nhau trong các yếu tố đầu tiên.
  2. Làm đối số cho sys.getrefcount().
  3. Phạm vi hiện tại, tức là ràng buộc với ab.
+1

… bạn có thể giải thích lý do tại sao xóa 'b' sẽ tăng số lần truy cập' a'? (Mặc dù tôi đã không thể tái tạo ở đây với Python 2 hoặc 3.) – kojiro

+0

@kojiro: Không. Nhưng tôi không nghĩ chúng ta đang thấy mọi thứ. –

+0

oh sau đó khi xóa b, tại sao số tham chiếu của một trở thành 4? – nextdoordoc