使用类创建的两个不同对象共享相同的内存



我正在处理一个Python脚本,运行一个从类实例化对象的函数。 运行此函数两次(假设创建两个对象(会创建两个指向相同内存位置的变量,有效地使我只有一个对象。如果对象的属性两次都相同,这是可以理解的,但它们不是。这意味着第一个实例化的属性被第二个实例化覆盖。

我试图制作一个深拷贝来纠正这一点。

x = deepcopy(create_my_object(123))
y = deepcopy(create_my_object('abc')) 

x 和 y 仍指向相同的内存位置。这意味着对象 x 的属性 '123' 被 'abc' 覆盖。我想要两个具有每个属性的对象。

类:

class Sq:
def __init__(self, source, queries):
Sq.datetime_created = datetime.datetime.now()
Sq.source = source
Sq.queries = queries
Sq.count = len(queries)
Sq.filtered = False 

总而言之,使用不同的参数集调用此类不会在不同的位置创建对象,我最终只会得到一个具有最新实例化属性的对象。

提前感谢 - 我和我的同龄人都被难住了!

编辑:创建对象的函数如下所示:

def news(url):
page = requests.get(url)
soup = BeautifulSoup(page.content, 'html.parser')
result = soup.find_all(class_='top-story__title')
return Sq(url, result)

Sq.__init__方法中,设置的是类变量的值,而不是实例变量的值。这些值由类的所有实例共享,并在其中任何一个实例中更改时在所有实例中被覆盖。有关类变量与实例变量的说明,请参阅此处。

将每行更改为,例如,self.datetime_created = datetime.datetime.now()等。

最新更新