小编nis*_*t80的帖子

与可变对象的默认参数相关的意外python行为

#! /usr/bin/python

class my_class:
    # 1. __init__
    def __init__(self):
        self.my_set = set()

    # 2. __init__
    #def __init__(self, arg_set = set()):
    #    self.my_set = arg_set 

c1 = my_class()
c1.my_set.add('a')

print c1.my_set

c2 = my_class()
c2.my_set.add('b')

print c1.my_set
Run Code Online (Sandbox Code Playgroud)

my_class有两种定义方式__init__:

如果我使用第一种方式,输出是预期的:
set(['a'])
set(['a'])

如果我使用第二种方式,输出是意外的:
set(['a'])
set(['a', 'b'])

第二种方式出了什么问题?如何修改C2(一个单独的对象),导致修改c1?

Edit: Updated the question title to reflect specific area of concern

python

1
推荐指数
1
解决办法
68
查看次数

标签 统计

python ×1