在python 2.7.6中运行下面提到的程序时会创建多少个对象? *我知道执行后会出现错误消息,我也知道字符串是不可变的,这就是错误消息背后的原因。我真正想知道的是找出是否在错误之前创建了一个对象'?
{% cropped_thumbnail Event.photo.pure_events_list.url|watermark:"General watermark" "cropping_free" %}
答案 0 :(得分:2)
是的。将拨打string.__setitem__(1, "s")
电话。因此,必须存在字符串对象才能进行调用。呼叫是BTW不能保证失败。 __setitem__
可以被覆盖,几乎可以有任何行为。
答案 1 :(得分:1)
在代码中:
string = "abcd"
将从str
创建一个不可变的"abcd"
对象。名称string
成为该对象的引用,并且引用计数递增。请注意,标准库中有一个名为string
的名称,如果您已导入该名称,则该名称将不再引用该模块,而是引用"abcd"
。
string[1] = "s"
将从str
创建一个不可变的"s"
对象,但是赋值失败,因此引用计数不会递增。从理论上讲,这意味着它可以被垃圾收集,除非其他东西已经引用"s"
。在实践中,有一些优化功能可能不会立即破坏对象,这些功能是依赖于实现的,不应该依赖它。
答案 2 :(得分:0)
以下交互式会话建议首先评估作业的右侧:
>>> string[1] = raw_input('Enter value: ')
Enter value: s
Traceback (most recent call last):
File "<ipython-input-51-a1be6bbb7f5b>", line 1, in <module>
s[1] = raw_input('Enter value: ')
TypeError: 'str' object does not support item assignment