Python 类中的方法为什么要操作一个_uinit__;变量

Python 类中的方法为什么要操作一个_uinit__;变量,python,class,Python,Class,我有这类记录 class Record(): def __init__(self, record): self.state_abbreviations = {'AL': 'Alabama'} self.raw_record = record self.is_valid = self.validate_record(self.raw_record) self.formatted_record = self.format_rec

我有这类
记录

class Record():
    def __init__(self, record):
        self.state_abbreviations = {'AL': 'Alabama'}
        self.raw_record = record
        self.is_valid = self.validate_record(self.raw_record)
        self.formatted_record = self.format_record(self.raw_record)


    def validate_record(self, record):
        if (record.get('provider_first_name') is None and 
            record.get('provider_last_name_legal_name') is None):
            return False
        return True

    def format_record(self, record):
        # swap state abbreviation for full state name
        record_state = record.get('provider_business_practice_location_address_state_name')
        full_state_name = self.state_abbreviations.get(record_state)
        record['provider_business_practice_location_address_state_name'] = full_state_name

        return record
当我实例化它时:

r = Record({'provider_first_name': 'is', 'provider_last_name_legal_name': 'fake',
            'provider_business_practice_location_address_state_name': 'AL'})
我希望
r.raw\u record
能给我

{'provider_business_practice_location_address_state_name': 'AL',
 'provider_first_name': 'is',
 'provider_last_name_legal_name': 'fake'}
但我得到的结果是:

{'provider_business_practice_location_address_state_name': 'Alabama',
 'provider_first_name': 'is',
 'provider_last_name_legal_name': 'fake'}

我不明白为什么原始记录会被
format\u record
函数操作。

传递给
record
构造函数的字典正被
self.raw\u record
引用,它反过来被传递到
format\u record
方法并在那里修改。在操作同一对象的所有这些部分中,这就是为什么您会在
raw\u record
中看到更改

如果你想避免这种情况,你可以在某处复制一本字典。例如,在构造函数中:

self.formatted_record = self.format_record(self.raw_record.copy())

哦,很酷,谢谢。有没有一种更像蟒蛇的方式来从更高的层次来处理我正在做的事情?我真的不知道你在问什么,但代码在我看来并不糟糕,当然这取决于你在做什么。如果您需要额外的帮助,请考虑创建一个不同的问题,避免在评论中进行长时间的讨论。