如何在Python中把多个变量初始化为同一个值?

1,789 阅读6分钟

给这个帖子评分

摘要: 要在Python中把多个变量初始化为相同的值,可以使用以下方法之一。

  • 使用链式等价物作为。var_1 = var_2 = value
  • 使用dict.fromkeys

这篇文章将引导你了解在Python中为多个变量赋值的方法。不再拖延,让我们马上深入了解解决方案。

方法1: 使用链式等价物

你可以使用链式等价物来声明变量,然后给它们分配所需的值。

Syntax: 

代码。

x = y = z = 100
print(x)
print(y)
print(z)
print("All variables point to the same memory location:")
print(id(x))
print(id(y))
print(id(z))

输出。

100
100
100
All variables point to the same memory location:
3076786312656
3076786312656
3076786312656

从上面的输出可以看出,每个变量都被分配了相同的值,而且每个变量都指向同一个内存位置。

方法2:使用dict.fromkeys

方法:。 使用dict.fromkeys(variable_list, val) 方法,将一个特定的值(val)设置到一个变量列表(variable_list)。

代码。

variable_list = ["x", "y", "z"]
d = dict.fromkeys(variable_list, 100)
for i in d:
    print(f'{i} = {d[i]}')
    print(f'ID of {i} = {id(i)}')

输出。

x = 100
ID of x = 2577372054896
y = 100
ID of y = 2577372693360
z = 100
ID of z = 2577380842864

讨论。从 上面的输出可以看出,每个被分配的变量都持有相同的值。然而,每个变量占据了不同的内存位置。这是由于每个变量作为字典的一个键,而字典中的每个键都是唯一的。因此,对一个特定变量的改变不会影响另一个变量,如下所示。

variable_list = ["x", "y", "z"]
d = dict.fromkeys(variable_list, 100)
print("Changing one of the variables: ")
d['x'] = 200
print(d)

输出。

{'x': 200, 'y': 100, 'z': 100}

概念性阅读。

fromkeys() 是一个字典方法,它根据指定的键和作为参数传递给它的值返回一个字典。

语法。 dict.fromkeys(keys, value)
➡ keys 是一个必需的参数,表示一个包含新字典中的键的迭代器。
➡ value 是一个可选的参数,表示新字典中所有键的值。默认情况下,它是 。None

例子。

k = ('key_1', 'key_2', 'key_3')
my_dictionary = dict.fromkeys(k, 0)
print(my_dictionary)

# OUTPUT: {'key_1': 0, 'key_2': 0, 'key_3': 0}

相关问题

让我们来谈谈一个经常被问到的问题,它困扰着许多编码员。

问题:我 试图使用如下所示的多重赋值来初始化变量,但是我对这种行为感到困惑,我希望分别重新赋值列表,我的意思是b[0]和c[0]和以前一样等于0。

a=b=c=[0,3,5]
a[0]=1
print(a)
print(b)
print(c)

输出。

a = b = c = [0, 3, 5]
a[0] = 1
print(a)
print(b)
print(c)

但是,为什么下面的赋值会导致不同的行为?

a = b = c = 5
a = 3
print(a)
print(b)
print(c)

输出。

3
5
5

问题来源。StackOverflow

解决方案

请记住,Python 中的一切都被当作一个对象。因此,当你像上面的例子那样把多个变量连在一起时,所有的变量都是指同一个对象。这意味着,a,bc 不是具有相同值的不同变量,而是对同一个对象的不同命名。

因此,在第一种情况下,当你对变量a的某个索引进行修改时,即a[0] = 1。这意味着你正在对同一个对象进行修改,这个对象也有b和c的名字。因此,b和c的修改会和a一起反映出来。

验证。

a = b = c = [1, 2, 3]
print(a[0] is b[0])

# True

要创建一个新的对象并对其进行分配,你必须使用复制模块,如下所示。

import copy
a = [1, 2, 3]
b = copy.deepcopy(a)
c = copy.deepcopy(a)
a[0] = 5
print(a)
print(b)
print(c)

输出。

[5, 2, 3]
[1, 2, 3]
[1, 2, 3]

然而,在第二种情况下,你是在为变量a 重新绑定一个不同的值。这意味着,你是在原地改变它,这导致现在在不同的位置上指向一个完全不同的值。这里,被改变的值是一个整数,而整数是不可改变的。

按照给定的图示,可以直观地看到在这种情况下发生了什么。

验证。

a = b = c = 5
a = 3
print(a is b)
print(id(a))
print(id(b))
print(id(c))

输出。

False
2329408334192
2329408334256
2329408334256

很明显,在将一个新的值重新绑定到变量a 之后,它指向了不同的内存位置,因此它现在指向了一个不同的对象。因此,在这种情况下,改变a 的值意味着我们正在创建一个新的对象,而不触及先前创建的对象,该对象被abc 所引用。

Python One-Liners书。首先掌握单行代码!

Python程序员将通过这些有用的单行语来提高他们的计算机科学技能。

Python One-Liners

Python One-Liners 将教你如何阅读和编写 "单行本"。***简洁的语句将有用的功能打包在一行代码中。***你将学会如何系统地解读和理解任何一行Python代码,并像专家一样写出雄辩的、强大压缩的Python。

本书的五个章节涵盖了(1)技巧和窍门,(2)正则表达式,(3)机器学习,(4)核心数据科学主题,和(5)有用的算法。

对单行线的详细解释介绍了关键的计算机科学概念提高你的编码和分析能力.你将了解高级Python特性,如列表理解,分片,lambda函数,正则表达式,地图减少职能,以及分片赋值.

你还将学习如何

  • 利用数据结构来解决现实世界的问题,比如使用布尔索引来寻找污染高于平均水平的城市
  • 使用NumPy的基础知识,如数组形状类型广播高级索引切片排序搜索聚合统计
  • 计算多维数据数组的基本统计数据 和无监督学习的K-Means算法
  • 使用分组命名组负数看头转义字符空白、字符集(和负数字符集)以及贪婪/非贪婪运算符创建更高级的正则表达式
  • 理解广泛的计算机科学主题,包括八卦宫格超集排列组合阶乘素数斐波那契数混淆搜索算法排序

在本书结束时,你将知道如何以最精炼的方式编写Python并仅用一行就能创建简明、漂亮的 "Python 艺术 "作品。

在亚马逊上获取你的Python单行本!!