为什么变量 = 对象不像变量 = 数字那样工作 [英] Why variable = object doesn't work like variable = number

查看:58
本文介绍了为什么变量 = 对象不像变量 = 数字那样工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

<预><代码>>>>一 = 3>>>b = a>>>打印(a,b)(3, 3)>>>b=4>>>打印(a,b)(3, 4)

但是,这些分配的行为有所不同:

<预><代码>>>>班级编号():... def __init__(self, name, number):... self.name = 姓名... self.number = 数字...>>>c = number("一", 1)>>>d = c>>>打印(c.number,d.number)(1, 1)>>>d.number = 2>>>打印(c.number,d.number)(2, 2)

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

解决方案

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

导入副本c = number("一", 1)d = ce = copy.copy(c)打印(c.number,d.number,e.number)d.number = 2e.number = 5打印(c.number,d.number,e.number)

这会给你:

1 1 12 2 5

These variable assignments work as I expect:

>>> a = 3
>>> b = a
>>> print(a, b)
(3, 3)
>>> b=4
>>> print(a, b)
(3, 4)

However, these assignments behave differently:

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

Why is c is same as d, unlike in (a, b) example? How can I do something like in (a, b) in (c, d) classes example? That is, copy the object and then change one part of it (that won't affect the object that I borrowed properties from)?

解决方案

I didn't see that anyone provided details on how to make these two cases work the same by copying the object instead of just assigning a new reference to the same object.

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)

This will give you:

1 1 1
2 2 5

这篇关于为什么变量 = 对象不像变量 = 数字那样工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆