python self 值自动改变_'self'隐式改变Python迭代中的以前的数据项

我有一个关于在Python中使用自变量的问题。请看下面的例子:

from copy import deepcopy

class IntClass:

props = {}

def __init__(self, keys, values):

indx = 0

for key in keys:

self.props[key] = values[indx]

indx += 1

def display(self):

for key in self.props.keys():

print 'key=%s value=%s' %(key,self.props[key])

class IntGen:

def gen(self, keys, values):

for vs in values:

yield [keys, vs]

def start(self, keys, values):

self.loader = self.gen(keys, values)

def nextItem(self):

return self.loader.next()

keys = ['k1', 'k2', 'k3']

values = [['v1.1', 'v1.2', 'v1.3'], ['v2.1', 'v2.2', 'v2.3'], ['v3.1', 'v3.2', 'v3.3']]

holder = []

intGen = IntGen()

intGen.start(keys, values)

while True:

try:

a = intGen.nextItem()

holder.append(deepcopy(IntClass(a[0],a[1])))

except StopIteration:

break

for h in holder:

h.display()就我的理解而言,结果应该是:

key=k3 value=v3.3

key=k2 value=v3.2

key=k1 value=v3.1

key=k3 value=v2.3

key=k2 value=v2.2

key=k1 value=v2.1

key=k3 value=v1.3

key=k2 value=v1.2

key=k1 value=v1.1但是,我得到如下:

key=k3 value=v3.3

key=k2 value=v3.2

key=k1 value=v3.1

key=k3 value=v3.3

key=k2 value=v3.2

key=k1 value=v3.1

key=k3 value=v3.3

key=k2 value=v3.2

key=k1 value=v3.1在我看来,在While循环中,当我尝试创建IntClass的一个新实例时,该新实例修改了存储在先前循环中创建的实例的props属性中的值,最终导致持有者包含具有相同数据的所有实例。

任何人都可以指出我的答案?看起来像自变量有问题,但我不知道如何解决它。

非常感谢,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值