首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么在python中一次输入布尔值会改变两次?

在Python中,布尔值的改变会涉及到引用和赋值的机制。

首先,Python中的布尔值是不可变对象,即一旦创建就不能被修改。当我们进行布尔值的操作时,实际上是对布尔对象的引用进行操作。

其次,Python中的赋值操作是将变量名和对象之间建立引用关系,而不是直接将值复制给变量。当我们将一个布尔值赋给一个变量后,实际上是将变量名指向了布尔对象的引用。如果再将该变量赋给另一个变量名,那么两个变量名指向的是同一个布尔对象。

因此,当我们通过一个变量名改变布尔值时,实际上是通过该变量名所指向的布尔对象进行修改。而如果另一个变量名也指向同一个布尔对象,那么通过该变量名访问该布尔对象时,得到的就是已经改变的值。

以下是一段示例代码来说明这个问题:

代码语言:txt
复制
a = True
b = a  # a和b指向同一个布尔对象True

a = False  # 通过a改变布尔对象的值
print(b)  # 输出False,因为b指向的是已经改变的布尔对象False

解决这个问题的方法是使用深拷贝或浅拷贝,创建一个新的布尔对象。例如,可以使用copy模块中的copy()函数进行浅拷贝,或者使用copy模块中的deepcopy()函数进行深拷贝。

综上所述,当在Python中一次输入布尔值会改变两次的原因是因为布尔值是不可变对象,而变量名实际上是对布尔对象的引用,当通过一个变量名改变布尔值时,如果另一个变量名也指向同一个布尔对象,那么通过该变量名访问该布尔对象时,得到的就是已经改变的值。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

python基础语法

1 python中的保留字 保留字也叫做关键字,不能把它们用在任何标识符名称,可以使用以下命令来查看python的保留字 1 import keyword 2 print(keyword.kwlist)...= 不等于 比较两个数是否不相等,返回布尔值 > 大于 比较两个数的大小关系,左边是否大于右边,返回布尔值 布尔值 >= 大于等于 比较两个数的大小关系...,左边是否大于等于右边,返回布尔值 布尔值 1 x = 15 2 y = 6 3 # 判断变量 x和y是否相等 4 if x =...成员运算符包括in和not in, x in y表示如果x在y序列中返回true; x not in y表示如果x不在y序列中返回true。...count 6 count += 1 7 print('1 到 %d 的和为:%d' % (n, sum)) while和else的配合使用(同样使用与for循环)   当while循环正常结束时,会执行

66620

Python 进阶指南(编程轻松进阶):九、深奥的 Python 怪现象

但是 Python 为c和d分别创建了 257 个对象,这就是为什么is操作符返回False 2 。...否则,你很少会碰到这个问题。 字符串内化 类似地,Python 重用对象在代码中表示相同的字符串字面值,而不是制作相同字符串的单独副本。...使用它们中的两个会得到值的负值,对于整数值,它只计算原始值: >>> spam = 42 >>> -(-spam) 42 这是一个非常愚蠢的操作,您可能永远不会看到一元求反操作符在真实世界的代码中使用两次...布尔值是整数值 就像 Python 认为浮点值42.0等于整数值42一样,它认为布尔值True和False分别等价于1和0。在 Python 中,bool数据类型是int数据类型的子类。...链接多种运算符 在同一个表达式中链接不同种类的运算符可能会产生意想不到的错误。

63240
  • 【Python零基础到入门】Python基础语法篇——基本数据类型

    Number(数字) 其中Number在Python中又可以分为 int(整数类型)、float(浮点数类型)、bool(布尔值类型)、complex(复数) 整数:Python可以处理任意大小的整数,...(str[2:5]) # 输出从第三个开始到第五个的字符 print (str[2:]) # 输出从第三个开始的后的所有字符 print (str * 2) # 输出字符串两次...Python中的字符串有两种索引方式,从左往右以0开始,从右往左以-1开始。 Python中的字符串不能改变。...[1:3]) # 从第二个开始输出到第三个元素 print (list[2:]) # 输出从第三个元素开始的所有元素 print (tinylist * 2) # 输出两次列表...# 输出从第二个元素开始到第三个元素 print (tuple[2:]) # 输出从第三个元素开始的所有元素 print (tinytuple * 2) # 输出两次元组

    61610

    【Python零基础到入门】Python基础语法篇——基本数据类型

    ---- Number(数字) 其中Number在Python中又可以分为 int(整数类型)、float(浮点数类型)、bool(布尔值类型)、complex(复数) 整数:Python可以处理任意大小的整数...(str[2:5]) # 输出从第三个开始到第五个的字符 print (str[2:]) # 输出从第三个开始的后的所有字符 print (str * 2) # 输出字符串两次...Python中的字符串有两种索引方式,从左往右以0开始,从右往左以-1开始。 Python中的字符串不能改变。...[1:3]) # 从第二个开始输出到第三个元素 print (list[2:]) # 输出从第三个元素开始的所有元素 print (tinylist * 2) # 输出两次列表...# 输出从第二个元素开始到第三个元素 print (tuple[2:]) # 输出从第三个元素开始的所有元素 print (tinytuple * 2) # 输出两次元组

    86920

    【Python】Python中的数据类型

    从以上两个例子可以得到结论以下结论: 静态数据类型的变量的取值范围不会改变; 静态数据类型的变量的数据类型不会改变; 这里有朋友可能就会好奇了,为什么将字符串赋予整型变量不会对结果产生影响?...因此对于Python而言,其变量的数据类型为动态数据类型,并且其变量具有以下特点: 变量的取值范围可视为负无穷大到正无穷大; 变量的数据类型会根据其存储值的数据类型的改变而改变 1.2 String(字符串...Python中布尔型被归为了整型的一个分支,但是其使用方式与C/C++中一致,都是用于判断语句中,如下所示: 对于布尔类型而言,不管是C/C++还是Python,布尔值的判断都满足: 0为假,值为0;...这也就是为什么第一次测试中对于字符串"123456789abcdef"转换之后得到的是一个很大的数,而非十六进制格式的结果; 该函数的操作数可以为数字,实际上就是进行的一个取整的工作,如下所示: 可以看到...结语 今天的内容到这里就全部结束了,在下一篇内容中我们将介绍《Python中的输入与输出》的相关内容,大家记得关注哦!

    8010

    Python 进阶指南(编程轻松进阶):七、编程术语

    手动内存分配是许多错误的来源,例如内存泄漏(程序员忘记释放内存)或双重释放错误(程序员两次释放相同的内存,导致数据损坏)。...表 7-2 列出了 Python 中一些可变和不可变的数据类型。...例如,我们可以定义一个callTwice()函数,可以向它传递一个需要调用两次的函数: >>> def callTwice(func): ... func() ......虽然你可以在你的源代码中写两次spam()。但是您可以在运行时将callTwice()函数传递给任何函数,而不必事先在源代码中输入两次函数调用。...了解了这些之后,您可能会认为将一个布尔值列表传递给sum()是计算列表中True值数量的好方法。但事实证明调用count() list 方法更快。

    1.6K20

    写了这么多年的python,tuple竟然是可变的?

    Python中一切皆对象,包括整数,浮点数和布尔值。在Java中,这些是“primitive数据类型”,并被视为与“objects”分开。 在Python中并非如此。...id是一个唯一的整数,在创建对象时创建,并且永远不会改变对象的生命周期。对象的类型也不能改变。只有对象的值可能会改变。...让我们尝试通过在交互式shell中输入以下内容来更改对象的值: >>> spam = 69 >>> spam = 666 可能有的同学就会认为已经将对象的值从69改变为666,然而并没有。...>>> spam = 69 >>> id(spam) 4307168128 >>> spam = 666 >>> id(spam) 4325801680 整数(浮点数,布尔值,字符串,字节)是不可变的。...这可能会导致一个常见的Python陷阱: >>> spam = ['miracle', 'young'] >>> papapa = spam >>> spam ['miracle', 'young']

    39720

    Python基础----数据变量和变量

    整数 Python可以处理任意大小的整数,当然包括负整数,在程序中的表示方法和数学上的写法一模一样,例如:1,100,-8080,0,等等。...布尔值 布尔值和布尔代数的表示完全一致,一个布尔值只有True、False两种值,要么是True,要么是False,在Python中,可以直接用True、False表示布尔值(请注意大小写),也可以通过布尔运算计算出来...在Python中,通常用全部大写的变量名表示常量: PI = 3.14159265359 但事实上PI仍然是一个变量,Python根本没有任何机制保证PI不会被改变,所以,用全部大写的变量名表示常量只是一个习惯上的用法...,如果你一定要改变变量PI的值,也没人能拦住你。...要做精确的除法,只需把其中一个整数换成浮点数做除法就可以: >>>10.0/3 3.3333333333333335 因为整数除法只取结果的整数部分,所以Python还提供一个余数运算,可以得到两个整数相除的余数

    1.2K50

    Python 自动化指南(繁琐工作自动化)第二版:二、流程控制

    当作为 Python 代码输入时,布尔值True和False缺少放在字符串两边的引号,它们总是以大写字母T或F开头,单词的其余部分是小写的。在交互式 Shell 中输入以下内容。...(其中一些指令是故意不正确的,它们会导致错误消息出现。)...这一次,你检查这个人的年龄,如果他们小于 12 岁,程序会告诉他们一些不同的东西。你可以在图 2-4 中看到流程图。...重复了五次!看看这两段代码的流程图,图 2-8 和 2-9 ,看看为什么会这样。...这就是为什么range(5)在子句中导致五次迭代,其中i被设置为0,然后是1,然后是2,然后是3,然后是4。变量i将上升到传递给range()的整数,但不包括该整数。

    2.3K50

    大数据技术之_23_Python核心基础学习_01_计算机基础知识 + Python 入门 (9.5小时)

    的交互界面 当我们通过命令行来输入 Python,所进入到的界面就是 Python 的交互界面。...输入完的指令将会被 Python 的解释器立即执行!     安装 Python 的同时,会自动安装一个 Python 的开发工具 IDLE,通过 IDLE 也可以进入到交互模式。...首选项 --> 快捷设置 --> 在 用户配置(User) --> 输入以下内容: { "keys": ["f5"], "caption": "SublimeREPL:Python","command"...如果在交互模式中输入一个表达式,解释器会自动将表达式的结果输出。...,非运算会对其进行取反操作,True 变 False,False 变 True #       对于非布尔值,非运算会先将其转换为布尔值,然后再取反 #        # and 逻辑与 #   and

    1.1K51

    Python基础知识 | Python

    Python中print( )会自动换行,如果不想换行应改为: print("......", end="") print( )函数也可以输出多个内容,用逗号","隔开,在输出的时候,遇到一个逗号会输出一个空格。...height = input("Please input your height:") # 获取用户输入的信息,并存储到变量height中 注意:在Python3中,input函数将输入的任何值都当作字符串进行处理...;在Python2中,会将输入的任何东西当作代码来进行执行 # Python2中实现相同的功能: height = raw_input("Please input your height:") 字符串...可以看到,Python解释器会自动将 \n 转义成换行。 当不想对字符串进行转义的时候,可以在字符串前面加上r,表示这是一个raw字符串。 print(r'Hello \nWorld!')

    1.1K20

    3.Python对象

    不同于很多其他语言,多个比较操作可以在同一行上进行, 求值顺序从左到右 . 我们会注意到,比较操作是针对对象的值进行的,也就是说比较的是对象的数值而不是对象本身....因为每个变量都指向同一个(共享的) 数据对象, 只要任何一个引用发生改变, 该对象的其他引用也会随之改变 ....核心笔记 : 在Python学习过程中, 偶尔会遇到某个运算符和某个函数是做同样一件事情 ,之所以如此是因为某些场合函数会比运算符更适合使用. 函数比表达式用起来方便 ....为什么i = 0 ,i = i + 1 , i为什么等于1 . 不是说数值和字符串对象是不可改变的么 ? 事实上,这里是一个新对象被创建,然后它取代了旧对象....一次可以访问一个元素或多个元素,也就是大家所了解的切片.

    68210

    原生基础的判断语句中switch语句和if else if语句的区别

    条件判断语句是程序开发过程中一种经常使用的语句形式,和大部分编程语言相同,JavaScript 中也有条件判断语句。...所谓条件判断,指的是程序根据不同的条件来执行不同的操作,例如根据年龄来显示不同的内容,根据布尔值 true 或 false 来判断操作是成功还是失败等。...其实不管在js原生也好在python或者java中或者c中都有:switch语句和if else if语句 你会发现他们有的时候可以互换,那有人就问,那为什么要出两种相同的条件语句呢?...一般情况下,他们两个语句可以互相替换 2.switch...case语句通常处理case为比较确定值的情况: 例子: var fruit = prompt('请输入想要查询的水果...而if...else语句由几种条件,就得判断多少次。 4.当分支比较少,if.....else语句的执行效率比switch语句更高! 5.当分支比较多时,switch语句的执行效率较高,而结构更加清晰

    1.2K20

    Python编程探索:从基础语法到循环结构实践(下)

    因为 join() 会先计算出所有字符串的总长度,然后只分配一次内存,而 + 操作符在每次拼接时都会创建一个新的字符串对象。...在 Python 中,逻辑运算符不仅可以用于布尔值,还可以用于非布尔值。...Python 评估非布尔值时,会根据真值测试规则,将其转换为 True 或 False。 5.6.1 and 和 or 的短路返回 and 返回第一个 False 的值或最后一个 True 的值。...如果用户没有输入任何内容,name 会被赋值为 "Guest",因为空字符串会被评估为 False,而 or 会返回第二个值。 5.8 运算符的优先级 在组合使用逻辑运算符时,运算符的优先级非常重要。...这意味着在没有使用括号时,Python 会按照这个优先级顺序计算表达式。

    14410

    Python基础教程之数据类型和变量

    整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的,而浮点数可能会四舍五入。 1.3 字符串 字符串是以单引号 或者 双引号 包裹起来的文本。...1.4 布尔值 布尔值和布尔代数的表示完全一致,只有 true flase 两种值,在python 中可以直接用 True False 表示布尔值(注意大小写),也可以通过布尔运算计算出来,布尔值可以通过...and 、 or 、not 运算 1.5 空值 python 中一个特殊的值,用 None表示,但是不能理解为0,None是一个特殊的空值。...常量 常量就是不能变的变量,在Python中,全部大写的变量名表示常量,但是在python中 常量还是能被改变,这点不同于js语言。大写只是一种自我约定的写法。 4....总结 python 支持多种数据类型,可以把任何数据都看成一个对象,而变量就是在程序中用来指向这些数据对象的,对变量赋值就是把数据和变量联系起来。

    31410

    第一章 python入门

    为了避免因为创建相同的值而重复申请内存空间所带来的效率问题,python解释器会再启动时创建出小数池, 范围是[-5,256],在该范围内的整数对象是全局解释器范围内被重复使用,永远不会被回收。...中 input:用户输入的任何值,都存成字符串类型 #在python2中 input:用户输入什么类型,就存什么类型 raw_input:等于python3的input 完成一个用户程序交互:1....中输出的是三,在python2中输出的是9 因为utf8中一个汉字占三位 li=['2','1','0'] len(li)输出的是三 for zjw in test: print...#在{}内用逗号分隔,可以存放多个key,value的值,其中value可以是任意值,key只能是数字、字符串、布尔值,每一个值都有唯一一个 key对应,可以更为高效方便的取值。...布尔值 #布尔值 一个True 一个False bool(a)将a转化为布尔值 #所有类型都自带布尔值 1.None,0,空 都为False 2.其余值都为True 重点 #可变类型:在id不变的情况下

    61711

    计算与推断思维 八、随机性

    首先,我们将使用 Python 进行随机选择。 在numpy中有一个叫做random的子模块,它包含许多涉及随机选择的函数。 其中一个函数称为choice。...布尔值和比较 在 Python 中,布尔值(以逻辑学家 George Boole 命名)表示真值,并只有两个可能的值:True和False。 无论问题是否涉及随机性,布尔值通常都由比较运算符产生。...然后,在每个一万次重复中,我们会抛硬币 100 次,计算正面的数量,并将其附加到heads上。...然后我们将玩这个游戏 N 次并收集结果。我们已经将 N 设为 10,000,但是你可以改变它。...要看看如何计算这样的几率,我们从一个更简单的设定开始:投掷硬币两次。 如果你投掷硬币两次,有四个等可能的结果:HH,HT,TH 和 TT。 我们把正面缩写为 H ,反面缩写为 T。

    77430

    每日算法系列【LeetCode 287】寻找重复数

    示例1 输入: [1,3,4,2,2] 输出: 2 示例2 输入: [3,1,3,4,2] 输出: 3 题解 二分法 根据抽屉原理,如果大小为 的抽屉里放了大于 个数,那么一定有一个抽屉里至少放了两个数...如果 ,那么根据抽屉原理, 到 中一定有一个数出现了至少两次。 反之如果 ,那么说明满足 的数的数量是 ,而抽屉大小是 ,所以根据抽屉原理, 到 中一定有一个数出现了至少两次。...综上,可以采用二分法,不断缩小 的范围,最终得到这个出现至少两次的数的值。 时间复杂度 。 快慢指针法 因为 中数据范围是 到 ,所以 。那么接着用 作为下标来索引值,得到 。...大家可以用上面的例子自己画图演示一下,我下面严格证明一下为什么这样是对的。 假设如下图所示,链表中链的长度是 ,环的长度是 。 ?...扩展: 那有人可能会问了,那要是链最后回到了 ,不就没有链,只有环了吗?哪来的入口?

    70520
    领券