Nói rằng tôi có hai danh sách:Python tài liệu tham khảo dữ liệu cơ bản, danh sách cùng tham khảo
>>> l1=[1,2,3,4]
>>> l2=[11,12,13,14]
tôi có thể đưa đến những danh sách trong một tuple, hoặc từ điển, và dường như họ là tất cả tài liệu tham khảo lại danh sách ban đầu :
>>> t=(l1,l2)
>>> d={'l1':l1, 'l2':l2}
>>> id(l1)==id(d['l1'])==id(t[0])
True
>>> l1 is d['l1'] is t[0]
True
Vì họ là những tài liệu tham khảo, tôi có thể thay đổi l1
và các dữ liệu được gọi trong tuple và thay đổi từ điển phù hợp:
>>> l1.append(5)
>>> l1
[1, 2, 3, 4, 5]
>>> t
([1, 2, 3, 4, 5], [11, 12, 13, 14])
>>> d
{'l2': [11, 12, 13, 14], 'l1': [1, 2, 3, 4, 5]}
Bao gồm nếu tôi thêm tài liệu tham khảo trong từ điển d
hoặc tài liệu tham khảo có thể thay đổi trong các tuple t
:
>>> d['l1'].append(6)
>>> t[0].append(7)
>>> d
{'l2': [11, 12, 13, 14], 'l1': [1, 2, 3, 4, 5, 6, 7]}
>>> l1
[1, 2, 3, 4, 5, 6, 7]
Nếu bây giờ tôi đặt l1
vào một danh sách mới, số lượng tài liệu tham khảo cho các danh sách ban đầu giảm:
>>> sys.getrefcount(l1)
4
>>> sys.getrefcount(t[0])
4
>>> l1=['new','list']
>>> l1 is d['l1'] is t[0]
False
>>> sys.getrefcount(l1)
2
>>> sys.getrefcount(t[0])
3
Và thêm hoặc thay đổi l1
không thay đổi d['l1']
hoặc t[0]
vì giờ đây là tham chiếu mới. Khái niệm tham chiếu gián tiếp là covered fairly well trong tài liệu Python nhưng không hoàn toàn.
Câu hỏi của tôi:
Là một đối tượng có thể thay đổi luôn một tài liệu tham khảo? Bạn có thể luôn luôn giả định rằng sửa đổi nó sửa đổi bản gốc (Trừ khi bạn đặc biệt tạo một bản sao với
l2=l1[:]
loại thành ngữ)?Tôi có thể tập hợp danh sách tất cả các tham chiếu tương tự bằng Python không? tức là, một số chức năng
f(l1)
trả về['l1', 'd', 't']
nếu tất cả những người đó đang đề cập đến cùng một danh sách?Giả định của tôi là không có vấn đề gì, dữ liệu sẽ vẫn hợp lệ miễn là có một số tham chiếu đến nó.
ví dụ:
l=[1,2,3] # create an object of three integers and create a ref to it
l2=l # create a reference to the same object
l=[4,5,6] # create a new object of 3 ints; the original now referenced
# by l2 is unchanged and unmoved
Có liên quan cho 3: http://docs.python.org/library/weakref.html –