Tôi đang cố gắng tạo một tập lệnh Python để mở một số cơ sở dữ liệu và so sánh nội dung của chúng. Trong quá trình tạo tập lệnh đó, tôi đã gặp sự cố khi tạo danh sách có nội dung là các đối tượng mà tôi đã tạo.
Tôi đã đơn giản hóa chương trình đến mức trần trụi cho bài đăng này. Đầu tiên, tôi tạo một lớp mới, tạo một thể hiện mới của nó, gán cho nó một thuộc tính và sau đó ghi nó vào một danh sách. Sau đó, tôi gán một giá trị mới cho phiên bản và lại ghi nó vào một danh sách ... và lặp đi lặp lại ...
Vấn đề là, nó luôn luôn là cùng một đối tượng nên tôi thực sự chỉ thay đổi đối tượng cơ sở. Khi tôi đọc danh sách, tôi lặp đi lặp lại cùng một đối tượng.
Vậy làm cách nào để ghi các đối tượng vào danh sách trong vòng lặp?
Đây là mã đơn giản của tôi
class SimpleClass(object):
pass
x = SimpleClass
# Then create an empty list
simpleList = []
#Then loop through from 0 to 3 adding an attribute to the instance 'x' of SimpleClass
for count in range(0,4):
# each iteration creates a slightly different attribute value, and then prints it to
# prove that step is working
# but the problem is, I'm always updating a reference to 'x' and what I want to add to
# simplelist is a new instance of x that contains the updated attribute
x.attr1= '*Bob* '* count
print "Loop Count: %s Attribute Value %s" % (count, x.attr1)
simpleList.append(x)
print '-'*20
# And here I print out each instance of the object stored in the list 'simpleList'
# and the problem surfaces. Every element of 'simpleList' contains the same attribute value
y = SimpleClass
print "Reading the attributes from the objects in the list"
for count in range(0,4):
y = simpleList[count]
print y.attr1
Vậy làm cách nào để tôi (nối, mở rộng, sao chép hoặc bất cứ thứ gì) các phần tử của simpleList để mỗi mục nhập chứa một thể hiện khác nhau của đối tượng thay vì tất cả đều trỏ đến cùng một đối tượng?