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)}")