首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么variable = object不像variable = number那样工作

为什么variable = object不像variable = number那样工作
EN

Stack Overflow用户
提问于 2015-04-29 01:49:21
回答 2查看 2K关注 0票数 21

这些变量赋值按照我的预期工作:

代码语言:javascript
复制
>>> a = 3
>>> b = a
>>> print(a, b)
(3, 3)
>>> b=4
>>> print(a, b)
(3, 4)

但是,这些赋值的行为是不同的:

代码语言:javascript
复制
>>> class number():
...     def __init__(self, name, number):
...         self.name = name
...         self.number = number
... 
>>> c = number("one", 1)
>>> d = c
>>> print(c.number, d.number)
(1, 1)
>>> d.number = 2
>>> print(c.number, d.number)
(2, 2)

为什么cd是一样的,而不是在(a, b)示例中?如何在(c, d)类示例中执行类似于(a, b)的操作?也就是说,复制对象,然后更改其中的一部分(这不会影响我从中借用属性的对象)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-29 02:10:29

我没有看到任何人提供了关于如何通过复制对象来使这两种情况相同的细节,而不仅仅是将新的引用分配给相同的对象。

代码语言:javascript
复制
import copy
c = number("one", 1)
d = c
e = copy.copy(c)

print(c.number, d.number, e.number)
d.number = 2
e.number = 5
print(c.number, d.number, e.number)

这将为您提供:

代码语言:javascript
复制
1 1 1
2 2 5
票数 10
EN

Stack Overflow用户

发布于 2015-04-29 02:00:21

这一点在其他答案中没有得到澄清,但如果我没记错的话,python中的整数实际上并不是原语。它们是不可变的整数对象。因此,当您有多个变量都包含值3时,实际上您有多个对Integer实例的引用,该实例包含值3。

因此,记住这一点;

代码语言:javascript
复制
a = 3
b = a

导致变量a和b各自指向保持值3的整数。同样,

代码语言:javascript
复制
c = number("one", 1)
d = c

产生变量c和d,每个变量指向number的相同实例。

同样的事情也会发生在

代码语言:javascript
复制
b = 4

现在b是对Integer 4的引用。

但是,当设置了d.number时

代码语言:javascript
复制
d.number = 2

由c和d指向的类"number“的实例的成员变量"number”被更新为引用Integer 2。这里的重要概念是,您正在修改由两个单独变量引用的对象的成员变量。

资料来源:http://www.laurentluce.com/posts/python-integer-objects-implementation/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29926485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档