我再再
你这个傻逼，再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再再把它赋值给s1就完事了
# 所以s1和s2最后都指向了同一个对象，它们的id相同，所以id(s1) = id(s2) == 3072579280。
a = 'hello world'
b = a
print(id(a))
print(id(b))
# 3073915504
# 3073915504
# 从上面的输出中可以看到，a和b都指向了同一个对象，它们的id值是一样的，所以a is b的结果为True。
print(a is b)
# True
# 修改a的值后，b的值也发生了变化，这是因为a和b指向同一个对象，修改了对象的值，两个引用都能看到。
a = 'hi'
print(b)
# hi
# 当然，这个例子中的字符串是不可变的，对于可变对象，比如列表，情况就不一样了
a = [1, 2, 3]
b = a
print(id(a))
print(id(b))
# 3072781832
# 3072781832
# a和b的id值相同，所以a is b为True
print(a is b)
# True
# 修改a的元素值
a[0] = 4
print(b)
# [4, 2, 3]
# 修改了a的元素值后，b的元素值也发生了变化，这是因为a和b指向同一个对象，修改了对象的元素，两个引用都能看到。
# 如果我们要比较两个变量是否相同，实际上是比较它们的id是否相同，而id可以用函数id()来获取。
# 如果a和b指向的是同一个对象，那么修改a会同时修改b，但是，如果我们把a指向另一个对象，就变成了a和b指向不同的对象，这时候修改a的值，不会影响b的值，因为a和b已经不是同一个对象了。
# 第三种符号is not是对is的否定，也就是说，如果两个变量指向的不是同一个对象，返回True，否则返回False。实际上，如果a is not b的返回值是True，那么a is b的返回值是False
a = 'hello'
b = 'world'
print(a is not b)
# True
print(a is b)
# False
# 与is类似，我们也可以用id()来判断两个变量是否不用指向同一个对象
a = 'hello'
b = 'world'
print(id(a) != id(b))
# True
# 当然，这里的字符串是不可变对象，比较的是两个字符串的值是否相等，如果想判断可变对象是否相等，必须使用函数cmp()
# is运算符比较两个对象的id是否相等，是否指向同一个对象
# == 运算符比较两个对象的值是否相等
# 实际上，当我们写a == 'ABC'时，a是一个字符串，'ABC'是另一个字符串，如果两者的值相等，返回True，否则返回False
a = 'hello