• 请不要在回答技术问题时复制粘贴 AI 生成的内容
UtopiaCHN
V2EX  ›  程序员

每创建一个对象,会在内存里复制一份实例(对象的)方法吗?

  •  
  •   UtopiaCHN · Mar 23, 2016 · 2736 views
    This topic created in 3736 days ago, the information mentioned may be changed or developed.

    我的理解正确吗:实例的方法放在类对象里,每当实例要调用实例方法时,就去类对象的内存里调用。

    8 replies    2016-03-24 08:45:20 +08:00
    neoblackcap
        1
    neoblackcap  
       Mar 23, 2016
    看情况,实践证明, Python 的实例方法不是,都是一个。
    UtopiaCHN
        2
    UtopiaCHN  
    OP
       Mar 23, 2016
    @neoblackcap 我意思也是一个,你是怎么证明都是一个的
    zwl2012
        3
    zwl2012  
       Mar 23, 2016 via iPhone
    通过指针?
    domty
        4
    domty  
       Mar 23, 2016
    Java 好像是有专门的一个地方叫方法区去存这些方法的。
    还有类和对象应该是两个概念吧。类对象是指什么。

    还有一点你说的东西应该是涉及到程序语言的内存模型,不同的程序语言应该会有不同。比如 JavaScript 中函数本身也是一个对象。
    billlee
        5
    billlee  
       Mar 23, 2016
    C++ 里方法放在代码段,每当要调用非虚函数时时,编译器把代码段里的地址填到调用处;调用虚函数时,先查虚函数表,虚函数表里是对应的实现函数在代码段里的地址(即函数指针)。

    @domty 有些动态语言,类也是类似对象的,比如 python 的类就可以赋值给变量,然后那个变量就可以当类用了
    alexapollo
        6
    alexapollo  
       Mar 23, 2016
    大部分语言实现是不会复制的
    neoblackcap
        7
    neoblackcap  
       Mar 23, 2016
    @UtopiaCHN
    ```
    # coding=utf-8


    if __name__ == '__main__':
    class Animal(object):
    def bark(self):
    pass

    dog = Animal()
    wolf = Animal()
    if id(dog.bark) == id(wolf.bark):
    print('Different method of instance from same class are same')
    else:
    print('Different method of instance from same class are different')
    ```
    gamexg
        8
    gamexg  
       Mar 24, 2016
    即使很特殊的情况也只是复制一个函数指针,没有碰到会复制代码的情况。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5326 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 57ms · UTC 08:46 · PVG 16:46 · LAX 01:46 · JFK 04:46
    ♥ Do have faith in what you're doing.