微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python 列表与变量修改内存差异

如何解决Python 列表与变量修改内存差异

问题

  • 我想了解为什么可以在不返回 python 的情况下修改列表,而变量不能。例如:
    def var_modify(a,b):
      a += b
    
    def list_modify(a,b):
      a.append(b)
    
    str_1 = "hello"
    var_modify(str_1,"world")
    print(str_1)  # Output: "hello"
    
    int_1 = 2
    var_modify(int_1,5)
    print(int_1)  # Output: 2
    
    list_1 = [1,2,3]
    list_modify(list_1,4)
    print(list_1)  # Output: [1,3,4]
    var_modify(list_1,[5])
    print(list_1)  # Output: [1,4,5]
    
  • 此外,我认为了解从函数返回列表是否比在没有返回语句的情况下修改函数中的列表效率更高或更低(或从内存角度更改内容)会很有用。例如:
    def modify_list_1(a,b):
      a.append(b)
    
    def modify_list_func2(a,b):
      return a.append(b)
    
    list_1 = [1,3]
    modify_list_1(list_1,4]
    
    list_1 = modify_list_2(list_1,5)
    print(list_1)  # Output: [1,5]
    
    modify_list_2(list_1,6)
    print(list_1)  # Output: [1,5,6]
    # Note: list_1 is still changed when assignment operator is not used
    

注意事项

  • 我想了解内存中幕后发生的事情。
    • 为什么列表“指针”会被修改,而变量“指针”却不会?这是否是正确的思考方式?
  • 如果有人可以向我展示 C 或 C++ 中的等效代码,我认为这将有助于我理解很多。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。