2024-03-28 23:04:14 发布
网友
在Python2.7.6中运行下面提到的程序时创建了多少个对象? *我知道在执行之后会出现错误消息,我也知道字符串是不可变的,这就是错误消息背后的原因。我真正想知道的是,在出现错误之前是否创建了对象?你知道吗
string = "abcd" string[1] = "s"
以下互动环节建议首先评估作业的右侧:
>>> 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"。你知道吗
"abcd"
str
string
string[1] = "s"
将从"s"创建一个不可变的str对象,但是赋值失败,因此引用计数不会增加。理论上,这意味着它可以被垃圾收集,除非其他东西已经引用了"s"。在实践中,有些优化特性可能不会立即破坏对象,这些特性依赖于实现,不应依赖于实现。你知道吗
"s"
是的。将调用string.__setitem__(1, "s")。因此,string对象必须存在才能进行调用。顺便说一句,呼叫不一定会失败。__setitem__可以被重写,几乎可以有任何行为。你知道吗
string.__setitem__(1, "s")
__setitem__
以下互动环节建议首先评估作业的右侧:
在代码中:
将从
"abcd"
创建一个不可变的str
对象。名称string
成为该对象的引用,引用计数递增。注意,标准库中有一个名为string
,如果您已经导入了它,那么这个名将不再引用模块,而是引用"abcd"
。你知道吗将从
"s"
创建一个不可变的str
对象,但是赋值失败,因此引用计数不会增加。理论上,这意味着它可以被垃圾收集,除非其他东西已经引用了"s"
。在实践中,有些优化特性可能不会立即破坏对象,这些特性依赖于实现,不应依赖于实现。你知道吗是的。将调用
string.__setitem__(1, "s")
。因此,string对象必须存在才能进行调用。顺便说一句,呼叫不一定会失败。__setitem__
可以被重写,几乎可以有任何行为。你知道吗相关问题 更多 >
编程相关推荐