python的形参为可变数据类型的坑

Posted Knock knock...

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python的形参为可变数据类型的坑相关的知识,希望对你有一定的参考价值。

------------恢复内容开始---------

函数可能会修改接收到的任何可变对象。不要使用可变类型的参数作为函数的参数默认值。

 

class Bus:
    def __init__(self, passengers=[]):
        self.passengers = passengers

    def pick(self, name):
        self.passengers.append(name)

    def drop(self, name):
        self.passengers.remove(name)


bus1 = Bus([\'a\', \'b\'])
print(bus1.passengers)
bus1.pick(\'c\')
bus1.drop(\'a\')
print(bus1.passengers)

bus2 = Bus()
bus2.pick(\'a\')
print(bus2.passengers)

bus3 = Bus()
bus3.pick(\'b\')
print(bus3.passengers)
print(bus2.passengers)



[\'a\', \'b\']
[\'b\', \'c\']
[\'a\']
[\'a\', \'b\']
[\'a\', \'b\']

 

# 浅复制的实际用处:保障篮球队的名单不变
basketball_team = [\'a\', \'b\', \'c\']


class TwilightBus:
    def __init__(self, passengers=None):
        if passengers is None:
            self.passengers = []
        else:
            self.passengers = list(passengers)

    def drop(self, name):
        self.passengers.remove(name)


bus1 = TwilightBus(basketball_team)

bus1.drop(\'a\')
bus1.drop(\'b\')

print(basketball_team)#[\'a\', \'b\', \'c\']

 

 

-

以上是关于python的形参为可变数据类型的坑的主要内容,如果未能解决你的问题,请参考以下文章

Python3 函数基础2

Python-函数基础

Python入门-5函数:06参数类型-位置参数-默认值参数-命名参数-可变参数-强制命名参数

python基础04/基础数据类型补充/以后会遇到的坑/二次编码

可变个数的形参的方法

方法 —— 参数传递重载命令行参数与可变参数