Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将项目添加到对象的列表中_Python_Python 3.x - Fatal编程技术网

Python 将项目添加到对象的列表中

Python 将项目添加到对象的列表中,python,python-3.x,Python,Python 3.x,我正在尝试向bag1中加水,但我不知道为什么“bag1.add_项(“水”)会影响bag2以下代码应该可以解决此问题: 类包: 定义初始化(自): self.items=[] def添加_项(自身,x): self.items.append(x) 如果名称=“\uuuuu main\uuuuuuuu”: bag1=袋子() bag2=袋子() bag1.添加_项(“水”) 打印(bag2.项目) 您只需添加def\uuuu init\uuuu(self)。 在类声明中声明变量使它们成为“类”成

我正在尝试向bag1中加水,但我不知道为什么“bag1.add_项(“水”)会影响bag2

以下代码应该可以解决此问题:

类包:
定义初始化(自):
self.items=[]
def添加_项(自身,x):
self.items.append(x)
如果名称=“\uuuuu main\uuuuuuuu”:
bag1=袋子()
bag2=袋子()
bag1.添加_项(“水”)
打印(bag2.项目)
您只需添加
def\uuuu init\uuuu(self)

在类声明中声明变量使它们成为“类”成员,而不是实例成员。在
\uuuu init\uuuu
方法中声明它们可以确保在对象的每个新实例旁边创建成员的新实例,这就是您要查找的行为。

注意
items=[]
已声明为类变量,因此,该类的所有实例都将为
共享相同的内存位置。为了使每个实例都有自己的
项目
列表,您需要使用关键字
self
,类似于:

class bag:

    def __init__(self):
        self.items = []

    def add_item(self,x):
        self.items.append(x)


if __name__ == "__main__":

    bag1 = bag()
    bag2 = bag()

    bag1.add_item("water")
    print(bag2.items)

有关更多详细信息,请参阅文档。

为什么每个对象的非iterables(例如定义为类成员的整数)都可以更改,而不会影响任何其他对象,而如果单个对象附加了此列表,则此列表确实会更改?如果在创建对象后初始化类变量,则类变量将成为实例变量。您可以运行此代码进行验证。
class bag:

    def __init__(self):
        self.items = []

    def add_item(self,x):
        self.items.append(x)


if __name__ == "__main__":

    bag1 = bag()
    bag2 = bag()

    bag1.add_item("water")
    print(bag2.items)
class bag:

    def __init__(self):
        self.items = []

    def add_item(self,x):
        self.items.append(x)


if __name__ == "__main__":

    bag1 = bag()
    bag2 = bag()

    bag1.add_item("water")
    print(bag2.items)