def check_same(a, b):
# Check whether the parameters passed to the function have the same or different IDs
return(f'{id(a)} {id(b)} {"same" if id(a) == id(b) else "different"}')
import math
# Create 3 names, 2 of which refer to the same int object, with the other name referring to a different int object with the same values
x = 1000 # Too large to be interned by CPython
y = int(math.sqrt(1e6)) # Do it like this to prevent the compiler folding constants and making x and y the same object
z = y # Make y the same object as z
print(f"Values: x={x} y={y} z={z}")
print(f"id: x={id(x)} y={id(y)} z={id(z)}")
# Check whether, when a function is called with these objects, differences in object ID are preserved (pass-by-object-reference)
# or lost (pass-by-value).
# If ints were passed by value, then check_same would give "same" for all three pairs
print(f"check_same(x, y): {check_same(x, y)}")
print(f"check_same(x, z): {check_same(x, z)}")
print(f"check_same(y, z): {check_same(y, z)}")
ZGVmIGNoZWNrX3NhbWUoYSwgYik6CiAgICAgICAgIyBDaGVjayB3aGV0aGVyIHRoZSBwYXJhbWV0ZXJzIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24gaGF2ZSB0aGUgc2FtZSBvciBkaWZmZXJlbnQgSURzCglyZXR1cm4oZid7aWQoYSl9IHtpZChiKX0geyJzYW1lIiBpZiBpZChhKSA9PSBpZChiKSBlbHNlICJkaWZmZXJlbnQifScpCgppbXBvcnQgbWF0aAoKIyBDcmVhdGUgMyBuYW1lcywgMiBvZiB3aGljaCByZWZlciB0byB0aGUgc2FtZSBpbnQgb2JqZWN0LCB3aXRoIHRoZSBvdGhlciBuYW1lIHJlZmVycmluZyB0byBhIGRpZmZlcmVudCBpbnQgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzCnggPSAxMDAwICAJCQkjIFRvbyBsYXJnZSB0byBiZSBpbnRlcm5lZCBieSBDUHl0aG9uCnkgPSBpbnQobWF0aC5zcXJ0KDFlNikpICMgRG8gaXQgbGlrZSB0aGlzIHRvIHByZXZlbnQgdGhlIGNvbXBpbGVyIGZvbGRpbmcgY29uc3RhbnRzIGFuZCBtYWtpbmcgeCBhbmQgeSB0aGUgc2FtZSBvYmplY3QKeiA9IHkgIAkJCQkjIE1ha2UgeSB0aGUgc2FtZSBvYmplY3QgYXMgegoKcHJpbnQoZiJWYWx1ZXM6IHg9e3h9IHk9e3l9IHo9e3p9IikKcHJpbnQoZiJpZDogeD17aWQoeCl9IHk9e2lkKHkpfSB6PXtpZCh6KX0iKQoKIyBDaGVjayB3aGV0aGVyLCB3aGVuIGEgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggdGhlc2Ugb2JqZWN0cywgZGlmZmVyZW5jZXMgaW4gb2JqZWN0IElEIGFyZSBwcmVzZXJ2ZWQgKHBhc3MtYnktb2JqZWN0LXJlZmVyZW5jZSkKIyBvciBsb3N0IChwYXNzLWJ5LXZhbHVlKS4KIyBJZiBpbnRzIHdlcmUgcGFzc2VkIGJ5IHZhbHVlLCB0aGVuIGNoZWNrX3NhbWUgd291bGQgZ2l2ZSAic2FtZSIgZm9yIGFsbCB0aHJlZSBwYWlycwpwcmludChmImNoZWNrX3NhbWUoeCwgeSk6IHtjaGVja19zYW1lKHgsIHkpfSIpCnByaW50KGYiY2hlY2tfc2FtZSh4LCB6KToge2NoZWNrX3NhbWUoeCwgeil9IikKcHJpbnQoZiJjaGVja19zYW1lKHksIHopOiB7Y2hlY2tfc2FtZSh5LCB6KX0iKQ==