Skip to main content
 首页 » 编程设计

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

2025年05月04日17JeffreyZhao

<分区>

#! /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 

my_class 有两种定义 __init__ 的方式:

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

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

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

编辑:更新了问题标题以反射(reflect)关注的特定领域