Great, really appreciate for your idea here, and I think the worst case time complexity is still not changed here but I guess is that average or best case time complexities might improve.
Follow is my take on your solution:
def multiply(x, y):
def add(a, b):
carry = a & b
a, b = a ^ b, carry << 1
running_sum = 0
while x: # Examines each bit of x.
if x & 1:
running_sum = add(running_sum , y)
x, y = x >> 1, y << 1
Please keep up this good work, and really appreciate for your input!