Adam0407 2020-12-04 10:21 采纳率: 0%
浏览 35

python 可变对象list,在相同指针的情况下append值不变

def test(a, data=None):
    # print('before check None:', id(data))
    # if data is None:
    #     data = []
    print('before append data id:', id(data))
    data.append(a)
    print('after append data id:', id(data))
    return data


if __name__ == '__main__':
    print('default data id:', id(test.__defaults__[0]))
    print(test(1,[]))
    print('default data id:', id(test.__defaults__[0]))
    print(test(2,[]))


output:
default data id: 8791239723024
before append data id: 5853704
after append data id: 5853704
[1]
default data id: 8791239723024
before append data id: 5853704
after append data id: 5853704
[2]

我的理解:data id 都是同一个指针(5853704),在调用test(2,[])之后结果应该是 [1,2]

但是程序结果output为[2],这是为什么

  • 写回答

3条回答 默认 最新

  • 陆沙 2020-12-04 10:38
    关注

    test函数里,data是局部变量。返回之后,data被销毁了。你下次再调用test,给里面data还是赋值为[]了,所以输出是[2]

    评论

报告相同问题?

悬赏问题

  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂