Adam0407 2020-12-04 09:54 采纳率: 0%
浏览 4

python默认参数,为何指针地址一样,但是列表却没有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: 30233096
after append data id: 30233096
[1]
default data id: 8791239723024
before append data id: 30233096
after append data id: 30233096
[2]

我认为在调用test(2,[])之后,应该打印出来[1,2]才是,因为两个列表的指针都是指向30233096地址,但是程序结果却是[2]

这让我有点疑惑,请大神详细解答

  • 写回答

1条回答 默认 最新

  • PythonJavaC++go 2020-12-04 10:36
    关注

    你把test函数中的data=None改为data=[];就能得到你想要的

    评论

报告相同问题?

悬赏问题

  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 matlab有关常微分方程的问题求解决
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?
  • ¥100 求三轴之间相互配合画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考