I am working on [Valid Perfect Square - LeetCode](https://leetcode.com/problems/valid-perfect-square/) 
and wrote a standard leftmost bisect search to solve the problem:


    class Solution:
        def isPerfectSquare(self, num: int) -> bool:
            #base case 1
            if num == 1: return True 
            lo = 1
            hi = num
            #recur case 
            while lo < hi:
                mid = (lo + hi) // 2
                if num > mid ** 2:
                    lo = mid + 1
                else:
                    hi = mid 
            return True if lo ** 2 == num else False

However, the score is annoying: 

> Runtime: 48 ms, faster than 24.22% of Python3 online submissions for Valid Perfect Square.
Memory Usage: 13.2 MB, less than 5.17% of Python3 online submissions for Valid Perfect Square.

I am not able to improve a standard template a little bit.

Could you please provide any advice?