bactuals是一个字符串列表。 Bpeaks也是如此。
actuals=bactuals[1:]
peaks=bpeaks[1:]
如果我现在看一下bactuals,我发现它仍然是一个字符串列表。但是,如果我执行以下操作:
actuals=bactuals[1:]
peaks=bpeaks[1:]
actuals=bactuals
peaks=bpeaks
(我意识到以上是一段荒谬的代码,但我正在测试找到另一个问题的根源。)
bactuals现在突然变成了一个类型列表。怎么样?如何单独行动或将一件事物存入另一件物品会改变原件的类型?
答案 0 :(得分:1)
如何单纯行动或将一件事物存入另一件事物会发生变化 原来的类型?
通过设置修改传入对象的setter:
class C(object):
def __init__(self):
self._actuals = []
@property
def actuals(self):
return self._actuals
@actuals.setter
def actuals(self, value):
self._actuals = value
self._actuals[:] = [int(s) for s in self._actuals]
bactuals = ["1", "2", "3"]
c = C()
c.actuals = bactuals
setter将列表中的每个项目存储为不同的类型(int),因为这是通过访问索引而不是创建新列表来完成的,所以这会修改原始列表。
如果发生了这种情况,您将无法在第一种情况下看到它,因为bactuals[1:]
实际上会创建一个新列表,而bactuals
不受影响。解决方法是将副本(bactuals[:]
)传递给setter,但更好的选择是修复setter,以便它自己创建一个新列表。
答案 1 :(得分:0)
你的例子不可重复。这是我所期望的。
>>> bactuals = ['a','b','c']
>>> actuals = bactuals[1:]
>>> actuals
['b','c']
>>> actuals = bactuals
>>> actuals
['a', 'b', 'c']