首页
学习
活动
专区
工具
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表示如果xy序列中返回true; x not in y表示如果x不在y序列中返回true。...count 6 count += 1 7 print('1 到 %d 的和为:%d' % (n, sum)) while和else的配合使用(同样使用与for循环)   当while循环正常结束时,执行

65720

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数据类型的子类。...链接多种运算符 同一个表达式中链接不同种类的运算符可能产生意想不到的错误。

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

    Number(数字) 其中NumberPython中又可以分为 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) # 输出两次元组

    61310

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

    ---- Number(数字) 其中NumberPython中又可以分为 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) # 输出两次元组

    85720

    PythonPython中的数据类型

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

    7210

    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']

    39220

    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

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

    2.3K50

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

    1K20

    原生基础的判断语句中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

    3.Python对象

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

    67610

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

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

    31010

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

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

    13710

    第一章 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不变的情况下

    59411

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

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

    68720

    关于JS30第五个挑战(弹性布局照片墙)的小bug

    事件,连续点击时,由于click事件对应的flex过渡还未完成便开始了下一过渡,实际上只发生了一flex过渡完成事件,因此两侧的字也跟随着该过渡完成而滑出。...因此我想到的办法是,从变化的逻辑出发,因为连续点击鼠标时,触发两次click事件,并在最终完成flex过渡时触发一transitionend事件。...由该陈述推断,一来一回的点击本应触发两次,实际却只触发一,这是矛盾的,那么就可以通过两个标记将两种事件联系起来,用逻辑判断来决定结果:即你触发两次,我也应该有两次才对,如果我只有一,那么就不应该执行该操作...transitionend事件,我选择创建一个布尔值来保持字体是否应该滑入的状态,即true表示需要滑入,false表示需要滑出,由于每张照片都有该事件,那么可以将该布尔值作为照片元素对象(panel)...this.value; //改变是否滑入的状态,这是关键 //若flex值为5,表示此时照片已经变大,同时检查this.value是否为true,若为true则应该滑入 if

    81700
    领券