0

bactuals 是一个字符串列表。bpeaks也是如此。

actuals=bactuals[1:]
peaks=bpeaks[1:]

如果我现在查看 bactuals,我发现它仍然是一个字符串列表。但是,如果我执行以下操作:

actuals=bactuals[1:]
peaks=bpeaks[1:]
actuals=bactuals
peaks=bpeaks

(我意识到上面是一段荒谬的代码,但我正在测试以找到另一个问题的根源。)

bactuals 现在突然变成了类型列表。如何?单纯的行为或将一件东西存储到另一件东西中怎么会改变原件的类型?

4

2 回答 2

1

单纯的行为或将一件东西存储到另一件东西中怎么会改变原件的类型?

通过有一个修改传入的对象的设置器:

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 以便它自己创建一个新列表。

于 2013-06-07T01:19:10.483 回答
0

您的示例不可重复。这如我所料。

>>> bactuals = ['a','b','c']
>>> actuals = bactuals[1:]
>>> actuals
['b','c']
>>> actuals = bactuals
>>> actuals
['a', 'b', 'c']
于 2013-06-07T01:03:01.607 回答