• 感谢,又搞懂个基础问题😀

  • 非常感谢😀 是我需要的

  • 嗯,感谢。确实是我表述错误,Python 默认参数当然可以指向可变对象,只是产生的副作用可能不是我需要的而已

  • 嗯,感谢。可能只是对象在内存的唯一标识符。关于这个问题我初衷只是想看看两个对象是否指向同一内存地址,如果 object_id 相同,那么不论 object_id 是否为内存地址,可否推出“具有相同 object_id 的对象一定指向同一内存地址”?我猜这个推论成立😀

  • 记事本乃装 B 专用😀 我起手就来写第一篇 Ruby 笔记:Ruby 和 Python 的默认参数对比
    原问题 url:https://blog.csdn.net/vincent2610/article/details/52181853
    例子:
    Python:

    #!/usr/bin/env python3
    # -*- coding: UTF-8 -*-
    
    class Food:
        def __init__(self):
            self.name = "banana"
    
    
    def eat(name, food=Food()):
        print(name + " eat " + food.name + ", id = " + str(id(food)))
    
    
    if __name__ == "__main__":
        eat("kobe")
        eat("james")
    

    运行结果:
    kobe eat banana, id = 2499344982592
    james eat banana, id = 2499344982592
    [Finished in 0.1s]

    Ruby:

    #!/usr/bin/env ruby
    # -*- coding: UTF-8 -*-
    
    class Food
        attr_accessor :name
        def initialize()  
            @name = "banana"  
        end 
    end
    
    def eat(name, food=Food.new)
        puts "#{name} eat #{food.name}, id = #{food.object_id}"
    end
    
    eat "kobe" 
    eat "james"
    

    运行结果:
    kobe eat banana, id = 16460400
    james eat banana, id = 16460240

    结论:Python 默认参数只能指向不可变对象,一直使用第一次 new 出的那个 obj;Ruby 默认参数指向可变对象,比较符合正常人类思维方式😂

  • 非常感谢,xx.object_id 我 get 到了。我用记事本学的,没有用 RubyMine 这类有提示功能的 IDE,一时半会居然懵逼了😁 。在您的带领下我成功入坑了😂