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的对象时,它是否相同?
或者根本没有差异?
答案 0 :(得分: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
比较内存中的对象,如上所述)