Python 为什么我需要深度复制?

Python 为什么我需要深度复制?,python,deep-copy,simpy,Python,Deep Copy,Simpy,我正在使用Python3上的simpy开发一个缓存模拟器。我创建一个请求对象,如下所示: req = Request(req_id, mapper_id, task , source, destination, path, req_offset, req_size, task.job.iotype) 并将其传递给以下函数: def generate_event(req_old, dc, env, event_type): req = copy.deepcopy(req_old) del

我正在使用Python3上的simpy开发一个缓存模拟器。我创建一个请求对象,如下所示:

req = Request(req_id, mapper_id, task , source, destination, path, req_offset, req_size, task.job.iotype)
并将其传递给以下函数:

def generate_event(req_old, dc, env, event_type):
  req = copy.deepcopy(req_old)
  del req_old
  req.rtype = event_type
  req.set_startTime(env.now)
  event = env.process(readReqEvent(req, dc, env))
如果我没有在generate_事件函数中创建deepcopy,那么每当我更改一个对象中的字段时,我在第一个对象之后创建的其他对象都会看到更改。deepcopy功能是一个时间方面的重功能,使整个模拟器变慢


我的问题是对象应该是独立的,不应该共享相同的引用。我这里漏了什么吗?

您似乎不需要deepcopy。仅将req_旧名称命名为req:

def生成事件(请求、dc、环境、事件类型):
req.rtype=事件类型
要求设置开始时间(环境现在)
事件=环境过程(readReqEvent(req、dc、env))
。。。每当我更改一个对象中的字段时,我在第一个对象之后创建的其他对象将看到更改“

这意味着它们实际上都是同一个对象。您有多个指向同一对象的引用,而不是多个指向多个对象的引用。通过确保您有多个可以独立操作的对象,DeepCopy可以解决这一问题


如果您处理的是可变对象,那么您需要在关键步骤进行复制,以便每个使用者都能收到他们自己的对象,以便他们可以根据需要进行操作,或者将对象设置为只读,并强制使用者根据需要进行复制(如果只有一些用户需要进行修改,这可能会更好).

如果您希望对象独立且不共享同一引用,那么这就是您需要深度复制它们的原因。您是对的。结果发现对象中的某些字段共享同一引用。通过更改我定义它们的方式,问题得到解决,我不再需要深度复制。