在 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
您好,我的 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