Tôi muốn khởi tạo từ điển các bộ (bằng Python 2.6) bằng cách sử dụng dict.fromkeys
, nhưng cấu trúc kết quả hoạt động lạ lùng. Cụ thể hơn:Hành vi không mong muốn từ dict.fromkeys
>>>> x = {}.fromkeys(range(10), set([]))
>>>> x
{0: set([]), 1: set([]), 2: set([]), 3: set([]), 4: set([]), 5: set([]), 6: set([]), 7: set([]), 8: set([]), 9: set([])}
>>>> x[5].add(3)
>>>> x
{0: set([3]), 1: set([3]), 2: set([3]), 3: set([3]), 4: set([3]), 5: set([3]), 6: set([3]), 7: set([3]), 8: set([3]), 9: set([3])}
Tôi rõ ràng không muốn thêm 3 vào tất cả các bộ, chỉ vào tập hợp tương ứng với x[5]
. Tất nhiên, tôi có thể tránh được vấn đề bằng cách khởi tạo x
mà không cần fromkeys
, nhưng tôi muốn hiểu những gì tôi đang thiếu ở đây.
Chúng đều là cùng một tập hợp. Bộ, danh sách, từ điển và bất kỳ đối tượng nào khác là loại tham chiếu và khi bạn chỉ định chúng cho biến khác, chỉ tham chiếu được sao chép chứ không phải đối tượng thực. 'fromkeys' phải sử dụng gán để kết hợp tập hợp với mỗi khóa, nhưng như bạn thấy, điều này không sao chép tập hợp. Tôi không chắc chắn làm thế nào để có được xung quanh này, ngoài việc tạo ra các từ điển theo một cách khác nhau. –