存储原始更改?

2024-04-28 06:00:29 发布

您现在位置:Python中文网/ 问答频道 /正文

bactuals是一个字符串列表。贝帕克斯也是。你知道吗

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

如果我现在看看bactuals,我会发现它仍然是一个字符串列表。但是,如果我做了以下事情:

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

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

bactuals现在突然变成了一个类型列表。怎样?仅仅是把一件东西放进另一件东西,怎么能改变原来的类型呢?你知道吗


Tags: 字符串代码类型列表事情意识我会peaks
2条回答

你的例子不可重复。这和我预期的一样。你知道吗

>>> bactuals = ['a','b','c']
>>> actuals = bactuals[1:]
>>> actuals
['b','c']
>>> actuals = bactuals
>>> actuals
['a', 'b', 'c']

How could the mere act or storing one thing into another thing change the type of the original?

通过使用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,以便它自己创建一个新列表。你知道吗

相关问题 更多 >