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

在Python中将一个变量的值分配给另一个变量时会发生什么?

戚令秋
2023-03-14
问题内容

这是我学习python的第二天(我了解C ++和一些OOP的基础知识),并且我对python中的变量有些困惑。

这是我目前对它们的了解:

Python变量是对对象(可变或不可变)的引用(或指针?)。当我们有类似的内容时num = 5,不可变对象5将在内存中的某个位置创建,而名称-
对象引用对num将在某个命名空间中创建。当我们拥有时a = num,不会复制任何内容,但是现在两个变量都引用相同的对象,a并被添加到相同的名称空间。

这就是我的书《 用Python自动处理无聊的东西》 ,令我感到困惑。由于它是一本新手书籍,因此没有提及对象,名称空间等,而是尝试解释以下代码:

>>> spam = 42
>>> cheese = spam
>>> spam = 100
>>> spam
100
>>> cheese
42

它提供的解释与C
++书籍的解释完全相同,由于我们正在处理对象的引用/指针,对此我并不满意。因此,在这种情况下,我想在第三行中,由于整数是不可变的,spam因此正在为内存中的其他位置分配一个全新的指针/引用,即,它最初指向的内存没有被修改。因此,我们已经cheese提到了由引用的初始对象spam。这是正确的解释吗?


问题答案:

作为C ++开发人员,您可以将Python变量视为指针。

因此,在编写时spam = 100,这意味着您“分配了指针”(以前指向该对象42)以指向该对象100

较早时,cheese被分配指向与所指对象相同的对象spam,该对象恰好42在那时。由于您尚未修改cheese,因此仍指向42

在这种情况下,不变性与它无关,因为指针分配不会更改所指向对象的任何内容。



 类似资料:
  • 问题内容: 我想了解原始和对象引用变量的行为方式不同。我以Kathy Sierra的 OCA / OCP Java SE7中 的以下代码为例: 在上面的代码中,我获得了更改之前和之后的值。 基本变量case的输出为: 但是,在对象引用变量中,一旦更改了的值,我将获得不同的值 参考变量大小写的输出为: 书中提到在两种情况下都复制位模式并放置新副本。如果这是真的,那为什么我们会得到不同的行为呢? 问题

  • 问题内容: 我在Javascript中有一组全局计数器变量: 等等 然后,我有了一个Javascript函数,该函数接受一个映射到这些全局计数器的“索引”数字。在此函数内部,我需要使用传递给该函数的“索引”值来读写这些全局计数器。 我希望它如何工作的示例,但当然根本不起作用: 我希望我要实现的目标是明确的。如果没有,我会尽力澄清。谢谢。 编辑说明: 我不是要增加计数器的名称,而是要增加计数器包含的

  • 问题内容: 我试图了解变量如何在python中工作。说我有一个对象存储在变量中: 如果我分配给,则它们都指向同一个对象: 但是,如果我重新分配或,那就不再正确了: 这两个变量现在具有不同的值: 我不明白为什么变量现在不同。为什么不再是真的?有人可以解释发生了什么吗? 问题答案: Python具有引用 对象的 名称 。对象与名称分开存在,名称与它们引用的对象分开存在。 __ 在为“名称分配名称”时,

  • 问题内容: 我想将一个类变量传递给另一个类,并使其成为该类的类变量。在以下情况下我该怎么做? 问题答案: 很难理解您正在问的问题,但这是一个可能的答案: 使B类成为A的子类: 如果重新声明为,则会出现一种情况,其中存在一个可以称为或的属性。(或在任一或刚刚…甚至作为或地方,并有类型和分别。) 如果您无法在和(或,以及一些包含声明的第三类)之间创建直接或子类型关系,那么您很不走运。他们无法共享声明。

  • 问题内容: 我刚开始使用快速语言,并且知道这个问题是重复的。我发现了几个类似的问题和答案,但我无法弄清这个问题。 我想将ScandString变量的值从ScanViewController传递给ResultViewController。 ScanViewcontroller如下: ResultViewController如下: println(detectedString)没有给我任何结果。问题是

  • 我是helm的新手,我希望能够使用配置映射和共享环境变量将gitlab项目变量写入文件。 我为每个环境(其中