0

bactuals は文字列のリストです。ビーピークスも同様です。

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

ここでバクチュアルを見ると、まだ文字列のリストであることがわかります。ただし、次のことを行う場合:

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

セッターは、リスト内の各項目を異なる型 (int) として格納します。これは、新しいリストを作成する代わりにインデックスにアクセスすることによって行われたため、元のものが変更されます。

これが起こっている場合、bactuals[1:]実際には新しいリストが作成され、bactuals影響を受けないため、最初のケースでは表示されません。回避策は、セッターにコピー ( ) を渡すbactuals[:]ことですが、新しいリスト自体を作成するようにセッターを修正することをお勧めします。

于 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 に答える