我需要使用随机生成的数字初始化类的实例。然后我需要在几个不同的试验中使用这个实例。但是,我在制作此实例的精确副本时遇到了麻烦 - 随机生成的数字不会保持不变。每个副本都会生成一个新的随机数。
temp = proc(random.randint(min, max))
tempCpy = copy.copy(temp) #changes on temp interfere with tempCpy
tempCpy = copy.deepcopy(temp) #doesn't start with same random number
答案 0 :(得分:2)
你有一个这样的课,我假设:
class proc(object):
def __init__(self, value):
self.value = value
初始化第一个实例时,请写下:
temp = proc(random.randint(min, max))
这会将随机数存储在temp.value
。
要制作副本,您只需将temp.value
传递给proc
构造函数:
dupe = proc(temp.value)
您也可以编写自己的类来自动执行此操作,以便在将proc
的实例传递给proc
构造函数时,它会复制(与其他类型一样,例如{{ 1}}和list
,其构造函数可用于复制它们。这样做的好处是可以保留所有需要做的知识,以便在类中创建副本而不是调用者需要知道数据的存储位置。
dict
现在,你可以写:
class proc(object):
def __init__(self, value):
if isinstance(value, proc):
value = value.value
self.value = value
或者,您可以向dupe = proc(temp)
添加方法以制作副本:
proc
现在你的副本是:
class proc(object):
def __init__(self, value):
self.value = value
def copy(self):
return type(self)(self.value)
最后,如果您为dupe = temp.copy()
方法copy
命名(或同时使用这两个名称),它会神奇地与__copy__
一起使用!
copy.copy
答案 1 :(得分:0)
您需要使用您将重用的参数初始化random.seed()。它将保证您生成“相同的随机数”。 (例如,在代码的其余部分之前的random.seed(0))
答案 2 :(得分:0)
也许,你可以单独从你的对象中随机编号?
init_numb = random.randint(min, max)
temp = proc(init_numb)
tempCpy = copy.copy(temp) #changes on temp interfere with tempCpy
tempCpy = copy.deepcopy(temp)