听说for
循环里面的变量是会泄露到外面,另外还存在地址引用的问题。
参考了几个文章说的,所以特意加了一行info={}
来每次都创建一个新的对象。
1.但是,结果还是没变,返回的集合全部是同一个结果。
2.这个info
还是灰色的,提示是该变量创建后没有被引用到,这尼玛是逗我吧,,,python什么个机制?
万不得已,把info再弄个深度复制,再append算了?
下面是这个类的源码,这个类的目的是把某A数据源,根据B的结构,构件出一个B。
class PubClass:
@staticmethod
def getInfo(model, data):
info = model
for k, v in vars(model).items():
if isinstance(data, object):
if hasattr(data, k):
setattr(info, k, getattr(data, k))
elif isinstance(data, dict):
if k in data:
setattr(info, k, data[k])
return info
@classmethod
def getList(cls, obj, data, toDict=True):
datalist = []
for d in data:
if toDict:
info = cls.getInfo(obj, d).__dict__
else:
info = cls.getInfo(obj, d)
datalist.append(copy.deepcopy(info)) # 目前只能弄个深度复制来解决,但是性能感觉不太好
return datalist
题主,你这里先
info={}
,又对info
赋值,实际上和这样赋值是一样的,变量
a
对1的引用已经断了,最后得到的只会是a = 2
。同理,
重新建立了引用关系,第一次创建的
info
确实没有用到,你可以尝试在循环体中用info.update()
,把获取的字典更新到info中。或者把你想要存进info
的key
value
直接用info = {key: value}
的方式创建,也是可以的。