是否在python中赋值之前创建了一个对象?

时间:2016-06-13 09:57:41

标签: python object

在python 2.7.6中运行下面提到的程序时会创建多少个对象? *我知道执行后会出现错误消息,我也知道字符串是不可变的,这就是错误消息背后的原因。我真正想知道的是找出是否在错误之前创建了一个对象'?

{% cropped_thumbnail Event.photo.pure_events_list.url|watermark:"General watermark" "cropping_free" %}

3 个答案:

答案 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