|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
t=(1,2,3)
id(t)
2758798689088
t*2
(1, 2, 3, 1, 2, 3)
id(t)
2758798689088
t=(1,2,3)
id(t)
2758793408128
t*=2
t
(1, 2, 3, 1, 2, 3)
id(t)
2758791869248
请教大神,这里为啥t*2输出的id值和t的id值一样,而t*=2输入的id值和t的id值不一样呢?
本帖最后由 歌者文明清理员 于 2023-4-16 18:04 编辑
在Python中,元组(tuple)是不可变的对象,这意味着一旦创建,元组的内部元素和其长度就不能改变。在你对元组进行乘法操作时,将会创建一个新的元组对象包含多个原始元组对象的引用。
因为在对元组执行乘法操作时,创建了一个新的元组对象,所以该对象的ID与原始的元组对象的ID不同。因此,当您使用 t * 2 对元组进行乘法操作时,它会创建一个新的元组并返回该元组,并且这个新元组具有一个不同于原始元组的唯一标识符。
而在使用 t *= 2 进行乘法赋值操作时,则是修改原始元组对象,将其扩展为一个由原来的元素重复两次的新元组对象。因此,在这种情况下,元组对象的ID与之前相同,但是其内部内容已经被改变。
以下是示例代码来演示这些概念:
- t = (1, 2, 3)
- id(t) # 返回元组对象t的ID
- t *= 2
- print(t) # 返回新创建的包含重复元素的元组对象
- id(t) # 返回扩展后的元组对象t的新ID
- t = (1, 2, 3)
- id(t) # 返回元组对象t的初始ID
- t = t * 2
- print(t) # 返回新创建的包含重复元素的元组对象
- id(t) # 返回新创建的包含重复元素的元组对象的唯一ID
复制代码
|
|