在不修改原始数据的情况下使用克隆数组数据时出现问题 (Python)

Problem using cloned array data without modifying original (Python)

我有一个 Python 入门课程的项目要完成,但由于一个问题我快要结束了。

我的问题如下: 我想使用由 class 的不同属性值组成的双倍“tdata”数据框,称为“world”来对其进行更改。 (尝试用当前的指标水平做一些预测) 我试图通过生成一个新的数据框“graphdat”来做到这一点,我在函数中使用它来生成图形。

我的问题是,最后我的“tdata”数组也被修改了。

我尝试使用 graphdat = tdata.copy() ,但它 returns 一个 AttributeError : 'world' object has no attribute 'copy'.

有人知道我如何用另一种方式做到这一点吗?

谢谢!

def graph_ppm(self):
        self.price_ppm = 10
        self.budget -= self.price_ppm
        period = tdata.period
        
        graphdat = tdata

        while period < 30:
            period +=1
            graphdat.sup = (graphdat.emit - graphdat.absorb)
            graphdat.ppm += graphdat.sup


            yppm.append(round(graphdat.ppm,2)) 

编辑:

我想我误解了整个问题。 正如 Md Imbesat Hassan Rizvi 所建议的,我决定使用 graphdat = copy.deepcopy(tdata) 但我想多次使用这个函数,我确实想重新初始化 graphdat到当前水平的参数和当前周期。 问题是,如果 运行 这个函数多次,我会得到这种图:

Graph

我的最大周期是 30,我想摆脱过去的值创建一个非常新的图表。

def graph_temp(self):

    self.price_temp = 10
    self.budget -= self.price_temp
    
    graphdat = copy.deepcopy(tdata)
    period = graphdat.period
    plx.clear_plot()

    while period < 30:
        period +=1
        graphdat.sup = (graphdat.emit - graphdat.absorb)
        graphdat.ppm += graphdat.sup

        if graphdat.ppm <380: 
            graphdat.temperature += graphdat.sup * 0.001
        if graphdat.ppm <400: 
            graphdat.temperature += (graphdat.sup) * 0.001
        if graphdat.ppm <450:
            graphdat.temperature += (graphdat.sup) * 0.005
            graphdat.pop_satisfaction -=1
        else:
            graphdat.temperature += (graphdat.sup) * 0.01


        ytemp.append(round(graphdat.temperature,2)) 

    limittemp = [2]*31
    recomtemp = [1.5]*31

    plx.plot(ytemp, label="Temperatures forecast",line_marker = "•")
    plx.plot(limittemp, label="Catastrophe level",line_marker = "-")
    plx.plot(recomtemp, label="Limit level after period 30",line_marker = "=")
    plx.xlabel('Temperatures')
    plx.ylabel('Period')
    plx.title('Title')
    plx.figsize(50, 25)
    plx.ticks(31, 11)

    return plx.show()

由于 tdata 似乎是自定义 class world 的实例,其复制属性不存在,您可以使用复制模块中的方法制作它的副本:

import copy
graphdat = copy.deepcopy(tdata)

从今以后,graphdattdata 将是 world class.

的不同实例