存储更改原始?

时间:2013-06-07 00:43:21

标签: python string list types

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

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

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

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

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

bactuals现在突然变成了一个类型列表。怎么样?如何单独行动或将一件事物存入另一件物品会改变原件的类型?

2 个答案:

答案 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']