Tôi đang xây dựng một dự án yêu cầu dữ liệu được chia sẻ trên toàn cầu. Tôi đã xây dựng một lớp GlobalDataBase để xử lý các dữ liệu này, giống như cách trong How do I avoid having class data shared among instances? và https://docs.python.org/2/tutorial/classes.html. Tuy nhiên, tôi đã tìm thấy một chút gì đó kỳ lạ đối với tôi. Mã của tôi là như sau:Chia sẻ dữ liệu toàn cầu bằng Python
class GlobalDataBase:
a = []
def copy_to_a(self, value):
self.a = value
def assign_to_a(self, value):
for idx in range(0, len(value)):
self.a.append(value[idx])
def test_copy():
gb1 = GlobalDataBase()
gb1.copy_to_a([1,2])
print gb1.a
gb2 = GlobalDataBase()
print gb2.a
def test_assign():
gb1 = GlobalDataBase()
gb1.assign_to_a([1,2])
print gb1.a
gb2 = GlobalDataBase()
print gb2.a
Kết quả của test_copy
là
[1,2]
[]
Kết quả của test_assign
là
[1,2]
[1,2]
Kết quả của phương pháp thứ hai là những gì tôi mong đợi. Nhưng tôi không thể hiểu tại sao phương pháp đầu tiên không hoạt động. Bất cứ ai có thể giải thích sự khác biệt giữa hai phương pháp này?
Về 'phương pháp assign_to_a' của bạn: hơn pythonic sẽ được để viết' cho các phần tử trong giá trị: self.a.append (element) '. – GingerPlusPlus