在 python 中不更改对象属性的过程值

process value of an attribute of an object without changing it in python

您好,我的 Python 代码遇到了问题。

我的问题如下:我想复制对象属性的值。 我创建对象代理,然后在函数 train_agent() 中,我将属性 state_vec 的值复制到变量 last_state_vec。现在的问题是,当我更改 last_state_vec 时,我也会自动更改代理 state_vec = np.array(0,0,10,0,0) 的属性 state_vec。我怎样才能只复制 state_vec 的值,以便在这种情况下它不会被更改。我希望 state_vec 保持零向量。 这是我的一些代码:

class DQN():
  def __init__(self)
  self.state_vec = np.zeros(5)
 
 
agent = DQN()

def train_agent(agent): 
  last_state_vec = agent.state_vec
  last_state_vec[2] = 10
  
  return 0

在 train_agent() 函数中,您可以将 last_state_vec 设置为 agent.state_vec.copy()。

目前您正在使用 agent.state_vec 的引用初始化变量 last_state_vec。

因此,将其替换为 agent.state_vec.copy() 应该可以解决问题![​​=10=]

如果你只需要一个浅拷贝你可以使用np.copy,像这样:

last_state_vec = agent.state_vec.copy()

在这种情况下应该可行,因为那里只有整数。

如果您在 state_vec 中存储 对象 ,您将需要使用深度复制,如下所示:

last_state_vec = copy.deepcopy(agent.state_vec)

您需要为此导入 copy

NumPy 文档提供了两种复制类型的示例。

https://numpy.org/doc/stable/reference/generated/numpy.copy.html