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

时间:2019-10-05 12:49:28

标签: python object memory

我正在处理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 

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

预先感谢-我和我的同伴都感到沮丧!

编辑:用于创建对象的函数如下:

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)

1 个答案:

答案 0 :(得分:1)

Sq.__init__方法中,您要设置 class 变量的值,而不是实例变量的值。这些值由该类的所有实例共享,并且在任何一个实例中更改后都将在所有实例中覆盖。有关类和实例变量的描述,请参见here

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