Trong Python (2 và 3). Bất cứ khi nào chúng ta sử dụng danh sách cắt, nó sẽ trả về một đối tượng mới, vd:
l1 = [1,2,3,4]
print(id(l1))
l2 = l1[:]
print(id(l2))
Đầu ra
>>> 140344378384464
>>> 140344378387272
Nếu điều tương tự được lặp lại với tuple, cùng một đối tượng được trả về, ví dụ:
t1 = (1,2,3,4)
t2 = t1[:]
print(id(t1))
print(id(t2))
Đầu ra
>>> 140344379214896
>>> 140344379214896
Sẽ thật tuyệt nếu ai đó có thể làm sáng tỏ lý do tại sao điều này xảy ra, trong suốt trải nghiệm Python của tôi, tôi đã ở dưới ấn tượng trống lát trả về một đối tượng mới.
Tôi hiểu rằng nó sẽ trả lại cùng một đối tượng vì các bộ dữ liệu là bất biến và không có điểm nào tạo ra một bản sao mới của nó. Nhưng một lần nữa, nó không được đề cập trong các tài liệu ở bất cứ đâu.
l2 = tuple(iter(l1))
bỏ qua việc tối ưu hóa
PyTuple_GetSlice
đã được ghi lại không chính xác sau khi thấy câu hỏi của bạn. Tài liệu hiện đã được sửa (đây là vấn đề bpo38557 ).