在python中是在赋值之前创建对象的吗?

2024-03-28 23:04:14 发布

您现在位置:Python中文网/ 问答频道 /正文

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

string = "abcd"
string[1] = "s"

Tags: 对象字符串程序消息string错误原因abcd
3条回答

以下互动环节建议首先评估作业的右侧:

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

在代码中:

string = "abcd"

将从"abcd"创建一个不可变的str对象。名称string成为该对象的引用,引用计数递增。注意,标准库中有一个名为string,如果您已经导入了它,那么这个名将不再引用模块,而是引用"abcd"。你知道吗

string[1] = "s"

将从"s"创建一个不可变的str对象,但是赋值失败,因此引用计数不会增加。理论上,这意味着它可以被垃圾收集,除非其他东西已经引用了"s"。在实践中,有些优化特性可能不会立即破坏对象,这些特性依赖于实现,不应依赖于实现。你知道吗

是的。将调用string.__setitem__(1, "s")。因此,string对象必须存在才能进行调用。顺便说一句,呼叫不一定会失败。__setitem__可以被重写,几乎可以有任何行为。你知道吗

相关问题 更多 >