当前位置: 首页 > 面试题库 >

为什么变量=对象不能像变量=数字那样工作

吕晟睿
2023-03-14
问题内容

这些变量分配按预期工作:

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

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

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

为什么与示例不同,为什么c相同?我如何在类示例中做类似的事情?也就是说,复制对象,然后更改它的一部分(那不会影响我借用属性的对象)吗?d``(a, b)``(a, b)``(c, d)


问题答案:

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

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)

这将为您提供:

1 1 1
2 2 5


 类似资料:
  • 声明这样的对象时: 它抛出以下错误: 但是,使用任何其他变量名(例如,)都可以正常工作。为什么?

  • 问题内容: 我试图弄清楚为什么我无法覆盖通过隔离范围()传递给angularJS指令的值。我尝试使用以下方法覆盖的值: 但是,由于某些原因,它不起作用。 如果我将其更改为: 有用。另外,在作品上分配价值。 为什么第一种方法不起作用? 我已经创建了这个示例插件。 问题答案: 如您在此处使用的那样,需要通过插值指令从属性获取值。似乎指令首先被加载,然后值被求值。因此,在当前摘要周期中不会发生更改。如果

  • 问题内容: 我有一个班级和年龄段。但是,当我更改对象的年龄时,该类的所有其他对象也会更改。 有人可以帮助解决这个问题吗? 问题答案: 静态变量 是 类变量, 因此从变量声明中删除为: 根据java docs: 在声明中具有static修饰符的字段称为静态字段或类变量。它们与类关联,而不与任何对象关联。该类的每个实例共享一个类变量,该变量位于内存中的一个固定位置。

  • 问题内容: 在Java中,变量名以字母,货币字符()等开头,但不以数字、、或 一个简单的问题:那是为什么? 为什么编译器不允许有变量声明,例如 问题答案: 因为Java语言规范是这样说的: 标识符字符: JavaLetter {JavaLetterOrDigit} 所以-是的,标识符必须以字母开头;它不能以数字开头。 其背后的主要原因是: 这就是大多数人所期望的 当您限制标识符的“布局”时,它使

  • 问题内容: 什么是Java中的对象引用变量? 参考变量是否保存对象的内存地址? 我很困惑。请说明一下。 问题答案: 我不确定我是否有能力正确回答这个问题,但是… 对象是类的实例,它存储在内存中的某些位置 引用是用来描述指向对象所在的内存位置的指针的。 变量是一种可以访问应用程序中该内存位置的方法(其值为“变量”)。尽管变量只能指向单个内存地址(如果不为空),则在应用程序的整个生命周期中,它可能会更

  • 问题内容: 我有一类具有各种成员变量的类。有一个构造函数,有getter方法,但没有setter方法。实际上,该对象应该是不变的。 现在我注意到了以下几点:当我使用getter方法获得变量列表时,可以添加新值,依此类推- 可以更改。下次调用此变量时,将返回更改的内容。怎么会这样?我没有再设置它,我只是在做它!使用这种行为是不可能的。那么这里有什么区别? 问题答案: 仅仅因为 对 列表 的引用 是不