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

如何创建对变量的引用?

金伟
2023-03-14
问题内容

代码中:

y = 7
x = y
x = 8

现在,y将是7,x将是8。但是实际上,我想改变y。我可以分配引用y吗?

例如,在C ++中,可以达到以下目的:

int y = 8;
int &x = y;
x = 9;

现在,这两个yx将是9


问题答案:

你不能。正如其他答案指出的那样,您可以(ab?)使用可变对象的别名来达到类似的效果。但是,这与C
++参考不是同一回事,我想解释一下为避免误解而实际发生的情况。

您会看到,在C
++(和其他语言)中,变量(以及对象字段以及集合中的条目等)是存储位置,并且您在其中写入了一个值(例如,整数,对象或指针)该位置。在这种模型中,引用是存储位置(任何类型)的别名-
分配给非引用变量时,您将一个值(即使只是指针,它仍然是一个值)复制到该存储位置;分配给参考时,您将复制到其他位置的存储位置。请注意,您无法更改引用本身-
绑定引用后(必须在创建一个引用后立即更改),对其的所有分配都不会更改引用,而是会更改引用的内容。

在Python(和其他语言)中,变量(以及对象字段以及集合中的条目等)只是一个名称。价值观在 某处 否则(例如散布在整个堆上),并且变量将值(不是C
引用的意义,更像是指针减去指针算术)引用。多个名称可以引用相同的值(通常是一件好事)。尽管与C
引用和传递引用无关,Python(和其他语言)还是将引用值所需的任何内容称为引用。分配给变量(或对象字段或…)只是使其引用另一个值。整个存储位置模型不适用于Python,程序员从不处理值的存储位置。他存储和整理的所有内容都是Python引用,而这些不是Python中的值,因此它们不能成为其他Python引用的目标。

所有这些都与值的可变性无关-例如,对于整数和列表来说都是相同的。您不能使用引用任何一个的变量来覆盖它指向的对象。您只能告诉对象修改其本身的某些部分-
例如,更改其包含的某些引用。

这是更具限制性的模型吗?也许可以,但是大多数时候它足够强大。如果不是这样,则可以使用以下自定义类(或等效的但不太明显的单个元素集合)来解决它。

class Reference:
    def __init__(self, val):
        self._value = val # just refers to val, no copy

    def get(self):
        return self._value

    def set(self, val):
        self._value = val

那仍然不允许您为“常规”变量或对象字段加上别名,但是您可以有多个变量引用同一个Reference对象(同为mutable-singleton-collection替代项)。您只需要注意始终使用.get()/ .set()(或[0])即可。



 类似资料:
  • 问题内容: 我有一个全局变量,需要在我的ViewController之间共享。 在Objective-C中,我可以定义静态变量,但是找不到在Swift中定义全局变量的方法。 您知道这样做的方法吗? 问题答案: 来自官方的Swift编程指南: 全局变量是在任何函数,方法,闭包或类型上下文之外定义的变量。全局常数和变量总是延迟计算的。 您可以在任何文件中定义它,也可以在任何位置访问它。因此,您可以在任

  • 我有两个Java类,Product和ProductReview。ProductReview除了变量long id和String review外,还有一个名为Product的变量,该变量应包含类Product中的一个对象。例子: Products类有私有变量long id、String name和List评论(它也从Product评论类中获取评论)。产品类与Product评论有一对多的关联,反之亦然

  • 本文向大家介绍如何从JavaScript中的变量值创建对象属性?,包括了如何从JavaScript中的变量值创建对象属性?的使用技巧和注意事项,需要的朋友参考一下 JS有2种用于创建对象属性的符号,即点符号和方括号符号。 要从变量创建对象属性,您需要通过以下方式使用方括号表示法- 示例 输出结果 这将给出输出- ES6引入了计算属性名称,您可以执行以下操作: 示例 输出结果 这将给出输出-

  • 我的课程注册项目应该有很多方法,比如(添加课程),(添加导师),等等(添加学生())就是其中之一,我想知道每次创建对象时如何更改对象的变量(std)我不知道每个对象如何都有相同的变量 那么,我想把变量改为std1、std2之类的任何建议 我想知道这是不是我做错了什么? 如果每个对象都用相同的变量声明,那么它会将每个创建的对象的数据克隆到新创建的对象? 谢谢你。

  • 问题内容: 该消息包含很多示例,时间有点长,但是我希望它能帮助我和其他人更好地掌握Python 2.7中变量和属性查找的全部内容。 我正在将PEP 227(http://www.python.org/dev/peps/pep-0227/)的术语用于代码块(例如模块,类定义,函数定义等)和变量绑定(例如作为赋值,参数声明,类和函数声明,for循环等) 我将术语变量用于可以不带点号调用的名称,将属性用

  • 可能重复: Java中的动态变量名: 假设我有一个字符串,如下所示。 现在,我想创建一个字符串,但是字符串的变量将被称为“Hello”。为了使字符串名为“Hello”,我必须访问string以获取名称“Hello”,这样我就可以将其用作变量名。下面是我想看的。 感谢您的努力,请尝试向我解释,因为我是Java初学者D