1
zoo.py
from main import animal

def getAnimal(animal)
    1) if animal == animal.tiger:
    or
    2) if animal == "animal"     

main.py
import Zoo        
Class animal
    tiger = "tiger"
    bear  = "bear"

1) get = Zoo.getAnimal(animal.tiger)
or
2) get = Zoo.getAnimal("tiger"):

以上是非常基本的示例,但执行上述代码的“最佳”约定是什么?

有人告诉我最好通过 1) 方法来做,因为“由于 python 使用指针的方式会发生奇怪的事情。”

执行上述代码时,在内存级别发生了什么?

如果我没记错的话,每个内存地址都会为 conseq 为字符串分配的内存地址获取 char 的 ascii 值?

现在将字符串作为animal.tiger的对象引用时是否相同?

还是根本没有区别?

4

1 回答 1

2

如果编译器不优化代码(即它比您的示例更复杂)#2 将分配一个带有另一个指针的匿名字符串。

但是由于==进行字符串比较,即使它是两个不同的字符串(在内存中),它也会起作用。

在您的示例中,编译器很可能会将代码优化为相同:

>>> class animal:
...  tiger = "tiger"
...  bear = "bear"
...
>>> animal.tiger
'tiger'
>>> id(animal.tiger)
140052399801616
>>> id('tiger')
140052399801616
>>>

编辑:添加了字符串内存位置不同的用户输入示例:

>>> id(animal.tiger)
140052399801616
>>> a=raw_input()
tiger
>>> id(a)
140052399801664
>>> a==animal.tiger
True
>>> a is animal.tiger
False

is如上用于比较内存中的对象)

于 2013-09-02T18:08:22.863 回答